我正在尝试将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')`
答案 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
对象。