DataGrid TemplateClumn ComboBox ItemsSource和SelectedValue

时间:2015-07-16 18:27:47

标签: wpf mvvm combobox datagridtemplatecolumn

大家好,我有一个包含两列的数据网格。它看起来如下:

<DataGrid ItemsSource="{Binding MyCollection}">
<DataGrid.Columns>
   <DataGridTextColumn Width="85*" Header="Team Name" Binding="{Binding TeamName}"/>
   <DataGridTemplateColumn Header="Prefix">
        <DataGridTemplateColumn.CellTemplate>
           <DataTemplate>
                 <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},Path=DataContext.AllowedPrefixes}" 
                           SelectedValue="{Binding Prefix}"> 
//SelectedValue="{Binding Prefix}" - this is not working i also tried SelectedItem

                </ComboBox>
             </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
   </DataGridTemplateColumn>
</DataGrid.Columns>

喜欢你可以看到我有一个带有ComboBox的DataGridTemplateColumn。我已将ComboBox ItemsSource绑定到一个包含一些固定值的集合。现在我想将ComboBox的SelectedValue绑定到MyClass的Prefix属性(这是我的DataGrid的DataContext)。但是因为我将这个ComboBox的ItemsSource设置为其他Collection这个绑定不起作用我认为datacontext已经改变了。 下面是一个类,它是datagrid的datacontext:

public class MyClass
{
    public string TeamName{get;set;}
    public string Prefix{get;set;}
}
// DataGrid.DataContext is ObservableCollection<MyClass>

因此,在ComboBox中正确显示了AllowedPrefixes集合,但未更新Prefix属性。我应该如何正确地使这个SelectedValue绑定?

EDIT。

请注意,ComboBox ItemsSource与我想用SelectedValue更新的产品不同

EDIT。

我认为它不起作用,因为我将ComboBox ItemsSource设置为不同的集合。我在下面尝试过但没有成功:

<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},Path=DataContext.AllowedPrefixes}" 
                                      SelectedValue="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridTextColumn}}, Path=DataContext.Prefix, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">

2 个答案:

答案 0 :(得分:0)

请尝试以下ComboBox

<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},Path=DataContext.AllowedPrefixes}" 
          SelectedValue="{Binding DataContext.Prefix, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}, UpdateSourceTrigger=PropertyChanged}">

如果您的DataGrid位于UserControl而不是Windows,请将AncestorType更改为UserControl

答案 1 :(得分:0)

好吧,尽管你都是这样的人 - 那些不知道答案的人和没有解释的DownVoted我。我找到了解决方案。我发布它可能会在将来使用它,我必须将NotifyOnTargetUpdated设置为true:

<ComboBox 
    SelectedItem="{Binding Prefix, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}"
    ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},Path=DataContext.AllowedPrefixes}">