无法使ItemsSource动态地为DataGridComboBoxColumn工作

本文关键字:DataGridComboBoxColumn 工作 动态 ItemsSource | 更新日期: 2023-09-27 18:03:13

我试图将我的DataGridComboBoxColumnItemsSource属性绑定到我的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') '

无法使ItemsSource动态地为DataGridComboBoxColumn工作

假设您的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对象。

相关文章:
  • 没有找到相关文章