将ObservableCollection绑定到DataGrid中的ComboBox不起作用

时间:2014-02-18 20:55:42

标签: c# wpf binding datagrid observablecollection

我已经准备好很多文章,涵盖了将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);
    }

所以一切都必须保留在这个视图模型中。

我还需要做些什么来完成这项工作。目前没有任何约束力。

此致 伊戈尔

1 个答案:

答案 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

这适用于:

  1. <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
  2. ArtikliStoritveViewModel
  3. DataContext属性位于DDVData
  4. ArtikliStoritveViewModel类在其中声明了一个名为DDV
  5. 的集合属性

    如果的话,那么这将不起作用。你说我在模型视图中有一些其他Observable Collection,所以我无法在DDV模型中将其更改为DDVDData ...我不知道你的意思是什么模型视图 ,但如果您将ArtikliStoritveData设置为Window.DataContext的实例,那么 就是它有权访问的实例。因此,您需要将集合添加到ArtikliStoritveViewModel类或DDV类中。