无法使ItemsSource动态地为DataGridComboBoxColumn工作
本文关键字:DataGridComboBoxColumn 工作 动态 ItemsSource | 更新日期: 2023-09-27 18:03:13
我试图将我的DataGridComboBoxColumn
的ItemsSource
属性绑定到我的ViewModel的属性。我明白,由于一些限制,这是不可能不使用某种类型的静态列表或解决方案。
我选择了变通路线。我尝试了这个StackOverflow线程上的每个答案都没有运气,最近我尝试了这个解决方案,也没有运气。
这是我的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>
我也试过调整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。数据错误:4:无法找到与引用绑定的源RelativeSource FindAncestor, AncestorType='System.Windows '。窗口",AncestorLevel ="1"。BindingExpression:路径= DataContext.ActionSource;DataItem =零;目标元素是'TextBlockComboBox' (Name= ");目标属性是'ItemsSource' (type 'IEnumerable') '
假设您的DataGrid
绑定到MyItem
对象列表。您有两个选项:
a)每个MyItem
对象包含已填充的ActionSource
列表。
b)你的主ViewModel包含MyItem
对象的列表(绑定到DataGrid
)和ActionSource
列表。那么你应该改变ComboBox ItemsSource
binding to:
<Setter Property="ItemsSource" Value="{Binding DataContext.ActionSource, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" />
在这两种情况下,你必须确保SelectedValueBinding
指向MyItem
对象的属性,而不是DISPLAY_ACTION
对象。