【发布时间】:2014-07-01 08:28:15
【问题描述】:
我正在尝试将 DataGridComboBoxColumn 的 ItemsSource 属性绑定到我的 ViewModel 的属性。我了解由于某些限制,如果不使用某种静态列表或解决方法,这是不可能的。
我选择了解决方法。我在this StackOverflow 线程上尝试了所有答案,但没有运气,最近我尝试了this 解决方法,也没有运气。
这是我上次尝试的 XAML:
<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>
我还尝试根据this 线程调整ItemsSource 绑定,但没有成功。
这是我的 ViewModel 属性以防万一:
public List<DISPLAY_ACTION> ActionSource
{
get
{
return _actionSource;
}
}
我得到的只是一个空的值列表。如果我在属性 getter 上放置一个断点,它永远不会中断,即 XAML 似乎没有找到 ActionSource 绑定。任何关于为什么这可能不起作用的帮助或指导将不胜感激。
编辑 - 更新 XAML:
<DataGrid HorizontalAlignment="Stretch"
VerticalAlignment="Top"
SelectionMode="Single"
RowHeaderWidth="20"
AutoGenerateColumns="False"
AlternatingRowBackground="Transparent"
ItemsSource="{Binding DisplayItemsView}">
<DataGrid.Columns>
<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 DataContext.ActionSource, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding DataContext.ActionSource, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
调试错误:
System.Windows.Data 错误:4:找不到与引用 RelativeSource FindAncestor 进行绑定的源,AncestorType='System.Windows.Window',AncestorLevel='1''。 BindingExpression:Path=DataContext.ActionSource;数据项=空;目标元素是'TextBlockComboBox'(名称='');目标属性是“ItemsSource”(类型“IEnumerable”)`
【问题讨论】:
-
@dkozl 是的,根据我提到的限制,这不起作用。在this线程中有解释。
-
不应该是
的可观察集合吗 -
你的
DataGrid.ItemsSource绑定到什么? -
@amnezjak 绑定到
DisplayItemsView,ListCollectionView的DISPLAY_ITEMs。
标签: c# wpf xaml mvvm datagridcolumn