2014-10-04 174 views
0

使用Datagridtemplatecolumn將WPFDatagrid綁定到組合框。發現難以獲得組合框的selectedItem。發現了類似的例子,但這不能解決我的問題。WPF Datagrid MVVM:使用DatagridTemplateColumn的組合框綁定

請找我的XAML的代碼段,下面的數據結構:

public class X 
{ 
    public X() 
    { 
     abc = new ObservableCollection<P>(); 
    } 

    public ObservableCollection<P> Y 
    { 
     get { return abc; } 
     set { abc = value; PropertyChanged("Y"); } 
    } 
} 

public class P 
{ 
    private string id; 
    private string name; 

    public string ID 
    { 
     get 
     { 
      return id; 
     } 
     set 
     { 
      id = value; 
      InvokePropertyChanged("ID"); 
     } 
    } 

    public string Name 
    { 
     get 
     { 
      return name; 
     } 
     set 
     { 
      name = value; 
      InvokePropertyChanged("Name"); 
     } 
    } 
} 

我上面定義的數據結構實現INotifyPropertyChanged接口。現在

<controls:DataGrid Name="datagrid" AutoGenerateColumns="False" ItemsSource="{Binding XList}" Grid.Row="0" 
        SelectedItem="{Binding SelectedX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 

     <controls:DataGrid.Columns> 
      <controls:DataGridTemplateColumn Header="Yl"> 
       <controls:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <ComboBox ItemsSource="{Binding Y}" 
            IsSynchronizedWithCurrentItem="False" DisplayMemberPath="Name" 
            SelectedValue="{Binding Path=SelectedY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True}" 
            SelectedValuePath="SelectedY" 
            SelectedItem="{Binding SelectedY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
        </DataTemplate> 
       </controls:DataGridTemplateColumn.CellTemplate> 
      </controls:DataGridTemplateColumn> 
     </controls:DataGrid.Columns> 
    </controls:DataGrid> 

,鑑於模型,具有X的Xlist列表的一個的ObservableCollection並且被綁定到在XAML的數據網格。並在綁定到Combobox的數據網格的每一行內有Y。有財產已選擇Y,綁定到組合框的SelectedItem。 也有一個屬性爲SelectedX綁定到datagrid的selectedItem,它工作正常。

問題無法獲取Combobox的Selected Item綁定。當選擇發生變化時,無法爲組合框設置所選項目。

任何人都可以幫我設置組合框的selecteditem綁定?

回答

0

在哪裏設置你的datacontext? 你可以做這樣的事情:

<controls:UserControl x:Name=MainControl> 
    <controls:UserControl.DataContext> 
     <classpath:X/> 
    </controls:UserControl.DataContext> 
    <controls:DataGrid ItemsSource={Binding YourItemsContainer}> 
      <controls:DataGrid.Columns> 
       <controls:DataGridComboBoxColumn ItemsSource={Binding ElementName=MainControl,Path=DataContext.Y} 
             SelectedItem={Binding ElementName=MainControl,Path=DataContext.SelectedY} 
DisplayMemberPath=Name /> 
      </controls:DataGrid.Columns> 
    </controls:DataGrid> 
</controls:UserControl> 

的想法是一個名稱設置爲連接到您的DataContext根元素,那麼你就可以訪問到它的由路徑DataContext屬性容易。當您位於模板內時,datacontext是ItemsSource對象。

希望它能幫助你一點!

相關問題