2014-02-18 69 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

相關問題