【发布时间】:2014-09-02 02:08:59
【问题描述】:
我正在编写一个带有 MVVM 设计的 wpf 应用程序。在视图中,我有一个带有组合框列的数据网格。数据网格绑定到“AdvancedSearchQueryObjType”类的 ObservableCollection。我想在这个数据网格中绑定组合框,并带有一个类“ObjTypeList”的列表。我在“AdvancedSearchQueryObjType”中有“ObjTypeList”列表,并在加载视图模型时填充两者。
但我在填充组合框时遇到了困难。请参阅下面的代码:
查看:
<DataGrid Name="dgSearchQuery"
ItemsSource="{Binding Path=QueryWindowDetails,Mode=TwoWay}"
Height="170" AutoGenerateColumns="False"
SelectionMode="Single" SelectionUnit="FullRow"
CanUserAddRows="False" CanUserDeleteRows="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Category" Width="150">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox DataContext="{Binding
RelativeSource={RelativeSource datatyp:AdvancedSearchQueryObjType}}"
ItemsSource="{Binding Path=ObjTypeList}" Width="140">
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25" />
<ColumnDefinition Width="115" />
</Grid.ColumnDefinitions>
<Rectangle Grid.Column="0" Margin="3,0,0,0"
Fill="{Binding Path=Icon, Converter={StaticResource ImgConv},
RelativeSource={RelativeSource AncestorType=ComboBoxItem}}" />
<Label Grid.Column="1" Content="{Binding Path=Value,
RelativeSource=
{RelativeSource AncestorType=ComboBoxItem}}" Margin="10,0,0,0"/>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
查看模型:
public class AddQueryViewModel : ViewModelBase
{
private void init()
{
QueryWindowDetails = new ObservableCollection<AdvancedSearchQueryObjType>();
var types = ERUSDataProvider.Instance.GetAllObjectTypeWithAttribute();
ObjTypeList = new ObservableCollection<ObjektType>();
types.ToList().ForEach(o => ObjTypeList.Add(new ObjektType { Key = o.Key, Value = o.Value,
Image = o.Image,
Icon = o.Icon }));
_rowCnt = 0;
AddRow();
_currentRow = new AdvancedSearchQueryObjType();
}
private void AddRow()
{
RowObject = new AdvancedSearchQueryObjType();
QueryWindowDetails.Add(RowObject);
this.ObjTypeList.ToList().ForEach(o => RowObject.ObjTypeList.Add((ObjektType)o));
_rowCnt += 1;
RowObject.Id = _rowCnt;
}
}
public class AdvancedSearchQueryObjType : ViewModelBase
{
private ObservableCollection<ObjektType> _objTypeList;
private ObservableCollection<AttribType> _attribTypeList;
private ObservableCollection<Operator> _operators;
private ObservableCollection<bool> _conjunction;
private bool _isNotDate;
private bool _isNotValue;
private Visibility _attribVisibility;
public int Id { get; set; }
public ObservableCollection<ObjektType> ObjTypeList
{
get { return _objTypeList; }
set { _objTypeList = value; OnPropertyChanged("ObjTypeList"); }
}
public ObservableCollection<AttribType> AttribTypeList {
get { return _attribTypeList; }
set { _attribTypeList = value;
OnPropertyChanged("AttribTypeList"); }
}
public ObservableCollection<Operator> Operators {
get { return _operators; }
set { _operators = value;
OnPropertyChanged("Operator"); }
}
public ObservableCollection<bool> Conjunction {
get { return _conjunction; }
set { _conjunction = value;
OnPropertyChanged("Conjunction"); }
}
public bool IsNotDate {
get { return _isNotDate; }
set { _isNotDate = value;
OnPropertyChanged("IsNotDate");}
}
public bool IsNotValue{
get { return _isNotValue;}
set { _isNotValue = value;
OnPropertyChanged("IsNotValue");}
}
public Visibility AttribVisibility {
get { return _attribVisibility; }
set {_attribVisibility = value;
OnPropertyChanged("AttribVisibility");
}
}
public AdvancedSearchQueryObjType() {
ObjTypeList = new ObservableCollection<ObjektType>();
AttribTypeList = new ObservableCollection<AttribType>();
Operators = new ObservableCollection<Operator>();
Conjunction = new ObservableCollection<bool>();
IsNotDate = true;
IsNotValue = false;
}
}
请让我知道我做错了什么?
提前致谢
【问题讨论】:
标签: wpf mvvm datagrid combobox observablecollection