2014-02-18 47 views
0

我已经准备好了很多关于将Observable Collection绑定到ComboBox的文章,但我仍然无法弄清楚为什么我的集合没有绑定到放置在DataGrid中的ComboBox。将ObservableCollection绑定到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; } 
    } 

我的视图模型:

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> 

我在查看模型观察到的集合:

private ObservableCollection<DDV> _DDVData = new ObservableCollection<DDV>(); 
    public ObservableCollection<DDV> DDVData 
    { 
     get 
     { 
      return this._DDVData; 
     } 

     set 
     { 
      _DDVData = value; 
     } 
    } 

我的DataGrid绑定到tihs视图模型:

<DataGrid ItemsSource="{Binding Path=ArtikliStoritveData} 

在视图模型构造我绑定到集合:

DDV _ddv; 
    public ArtikliStoritveViewModel() 
    { 
     _ddv = new DDV { ID = 1, Naziv = "Ceka" }; 
     DDVData.Add(_ddv); 
    } 

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

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

问候, 伊戈尔

回答

0

你错就错在你的数据模型。 DataTemplate的可用范围是DDV类的一个实例,并且没有名为DDVData的集合属性用于数据绑定。相反,你需要一个集合添加到您的DDV,你可以将数据绑定到ComboBoxDataGrid,然后每一行数据从视图模型命名DDVData集合属性绑定到DataGrid.ItemsSource财产类:

<DataGrid ItemsSource="{Binding CollectionPropertyInViewModel}"> 
    ... 
     <DataGridTemplateColumn Header="Test"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <ComboBox x:Name="cmbDDV" 
         ItemsSource="{Binding CollectionPropertyInModelClass}" 
         DisplayMemberPath="Naziv" /> 
        </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    ... 
</DataGrid> 

顺便说一下,如果你在Visual Studio的输出窗口中查看过,你应该看到一些类似的错误,在对象DDV或类似的东西中找不到属性DDVData ......有帮助的线索。


UPDATE >>>

我更新了上面的代码,以使其更清晰。有了您的信息,您只需提供,你需要这样做:

  1. DataGrid是具有ArtikliStoritveViewModel实例作为其DataContext
  2. Window

    <DataGrid ItemsSource="{Binding DDVData}"> 
        ... 
         <DataGridTemplateColumn Header="Test"> 
          <DataGridTemplateColumn.CellTemplate> 
           <DataTemplate> 
            <ComboBox x:Name="cmbDDV" 
             ItemsSource="{Binding ArtikliStoritveData}" 
             DisplayMemberPath="Naziv" /> 
            </DataTemplate> 
          </DataGridTemplateColumn.CellTemplate> 
         </DataGridTemplateColumn> 
        ... 
    </DataGrid> 
    

    时工作

  3. DDVData属性在ArtikliStoritveViewModel
  4. DDV类有一个集合属性宣布,任命ArtikliStoritveData

如果这是不是的情况下,那么这是行不通的。你说我在模型视图中有一些其他Observable集合,所以我不能将其更改为DDVDData中的DDVDData ...我不知道你的意思是模型视图,但是如果您将Window.DataContext设置为实例你的ArtikliStoritveViewModel,是它有权访问的。因此,您需要将该集合添加到DDV课程或ArtikliStoritveViewModel课程中。

+0

我在模型视图一些其他观察到的集合,所以我不能在DDV模型将其更改为DDVDData: 公众的ObservableCollection ArtikliStoritveData { 得到{_artikliStoritveData; } set { _artikliStoritveData = value; OnPropertyChanged(“ArtikliStoritveData”); } } Igor

+0

请将您的代码添加到*问题末尾*和*不*在*注释*中,难以查看。另外,我并不完全明白你的意思。我添加了 – Sheridan

+0

。 “输出”窗口中没有任何错误或警告。 – Igor

相关问题