无法让ItemsSource动态地为DataGridComboBoxColumn工作

时间:2014-05-13 15:10:36

标签: c# wpf xaml mvvm datagridcolumn

我正在尝试将ItemsSource的{​​{1}}属性绑定到我的ViewModel的属性。据我所知,由于某些限制,如果不使用某种静态列表或变通方法,这是不可能的。

我选择了解决方法。我尝试了this StackOverflow线程上的每个答案都没有运气,而且最近我尝试了this解决方法而没有运气。

根据我的上次尝试,这是我的XAML:

DataGridComboBoxColumn

我还尝试按照this线程调整<DataGridComboBoxColumn Header="Action" SelectedValueBinding="{Binding DISPLAY_ACTION_ID, Mode=TwoWay}" SelectedValuePath="DISPLAY_ACTION_ID" DisplayMemberPath="DISPLAY_ACTION_DESC"> <DataGridComboBoxColumn.ElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource" Value="{Binding ActionSource}" /> </Style> </DataGridComboBoxColumn.ElementStyle> <DataGridComboBoxColumn.EditingElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource" Value="{Binding ActionSource}" /> </Style> </DataGridComboBoxColumn.EditingElementStyle> </DataGridComboBoxColumn> 绑定,但没有运气。

这是我的ViewModel属性,以防它有用:

ItemsSource

我得到的只是一个空的值列表。如果我在属性getter上放置一个断点,它永远不会中断,即看起来XAML没有找到public List<DISPLAY_ACTION> ActionSource { get { return _actionSource; } } 绑定。任何帮助或指导,为什么这可能不起作用将不胜感激。

编辑 - 更新了XAML:

ActionSource

调试错误:

  

System.Windows.Data错误:4:找不到与引用RelativeSource FindAncestor绑定的源,AncestorType ='System.Windows.Window',AncestorLevel ='1''。 BindingExpression:路径= DataContext.ActionSource;的DataItem = NULL; target元素是'TextBlockComboBox'(Name =''); target属性是'ItemsSource'(类型'IEnumerable')`

1 个答案:

答案 0 :(得分:1)

假设您的DataGrid绑定到MyItem个对象的列表。您有两种选择:

a)每个MyItem对象都包含已填充的ActionSource列表。

b)您的主ViewModel包含MyItem个对象的列表(绑定到     DataGrid)和ActionSource列表。然后你应该改变     ComboBox ItemsSource绑定到:

<Setter Property="ItemsSource" Value="{Binding DataContext.ActionSource, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" />

在这两种情况下,您都必须确保SelectedValueBinding指向MyItem对象的属性,而不是DISPLAY_ACTION对象。