我已经准备好很多文章,涵盖了将Observable Collection绑定到ComboBox但我仍然无法弄清楚为什么我的集合没有绑定到放在DataGrid中的ComboBox。
我的模特
class DDV
{
public DDV(int ID, string Naziv)
{
_ID = ID;
_Naziv = Naziv;
}
private int _ID;
public int ID
{
get { return _ID; }
set { _ID = value; }
}
private string _Naziv;
public string Naziv
{
get { return _Naziv; }
set { _Naziv = value; }
}
我的ViewModel:
class ArtikliStoritveViewModel : INotifyPropertyChanged
{
public ArtikliStoritveViewModel()
{
DDVData.Add(new DDV(1, "Ceka"));
DDVData.Add(new DDV(2, "Zeka"));
}
private ObservableCollection<DDV> _DDVData = new ObservableCollection<DDV>();
public ObservableCollection<DDV> DDVData
{
get
{
return this._DDVData;
}
set
{
_DDVData = value;
}
}
的DataContext:
<Window.DataContext>
<local:ArtikliStoritveViewModel/>
</Window.DataContext>
结合:
<DataGridTemplateColumn Header="Test">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
x:Name="cmbDDV"
ItemsSource="{Binding DDVData}"
DisplayMemberPath="Naziv"
/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
我在View模型中有可观察的集合:
private ObservableCollection<DDV> _DDVData = new ObservableCollection<DDV>();
public ObservableCollection<DDV> DDVData
{
get
{
return this._DDVData;
}
set
{
_DDVData = value;
}
}
我的DataGrid绑定到查看模型:
<DataGrid ItemsSource="{Binding Path=ArtikliStoritveData}
在View模型的构造函数中,我绑定到集合:
DDV _ddv;
public ArtikliStoritveViewModel()
{
_ddv = new DDV { ID = 1, Naziv = "Ceka" };
DDVData.Add(_ddv);
}
所以一切都必须保留在这个视图模型中。
我还需要做些什么来完成这项工作。目前没有任何约束力。
此致 伊戈尔
答案 0 :(得分:0)
您的错误在您的数据模型中。您的DataTemplate
可用的是DDV
类的实例,并且没有数据绑定到的名为DDVData
的集合属性。相反,您需要向DDV
类添加一个集合,您可以将数据绑定到ComboBox
的每一行中的DataGrid
,然后数据绑定名为{{1}的集合属性}从视图模型到DDVData
属性:
DataGrid.ItemsSource
顺便提一下,如果您在Visual Studio中查看了输出窗口,您应该看到一些错误,例如在对象<DataGrid ItemsSource="{Binding CollectionPropertyInViewModel}">
...
<DataGridTemplateColumn Header="Test">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="cmbDDV"
ItemsSource="{Binding CollectionPropertyInModelClass}"
DisplayMemberPath="Naziv" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...
</DataGrid>
中找不到名为DDVData
的属性或类似的东西......有用的线索。
更新&gt;&gt;&gt;
我更新了上面的代码,使其更加清晰。根据您刚才提供的信息,您需要执行此操作:
DDV
这适用于:
<DataGrid ItemsSource="{Binding DDVData}">
...
<DataGridTemplateColumn Header="Test">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="cmbDDV"
ItemsSource="{Binding ArtikliStoritveData}"
DisplayMemberPath="Naziv" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...
</DataGrid>
位于DataGrid
实例设置为Window
ArtikliStoritveViewModel
中
DataContext
属性位于DDVData
ArtikliStoritveViewModel
类在其中声明了一个名为DDV
如果不的话,那么这将不起作用。你说我在模型视图中有一些其他Observable Collection,所以我无法在DDV模型中将其更改为DDVDData ...我不知道你的意思是什么模型视图 ,但如果您将ArtikliStoritveData
设置为Window.DataContext
的实例,那么 就是它有权访问的实例。因此,您需要将集合添加到ArtikliStoritveViewModel
类或DDV
类中。