【问题标题】:Bind WPF DataGridTemplateColumnn ComboBox after page had loaded页面加载后绑定 WPF DataGridTemplateColumnn ComboBox
【发布时间】:2020-03-27 11:18:43
【问题描述】:

我在绑定到我的控件上的 DataGridTemplateColumn 列时遇到问题。我已经阅读了几篇关于此的帖子,但似乎没有一个对我来说正常工作,可能是因为应用程序架构 - 我不确定。绑定到 DataGridTextColumn 有效,但我在模板列中定义的 ComboBox 是空白的。我有这个 XAML sn-p::

    <jibcontrols:JibGrid x:Name="UsersDataGrid">
...
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox Text="{Binding Path=Role}" ItemsSource="{Binding Item, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}, Mode=FindAncestor}}" DisplayMemberPath="Role"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn Width="2*" Binding="{Binding Role}"></DataGridTextColumn>
...

我们使用的是消息总线架构,因此在页面初始加载时数据源还没有准备好。从服务返回数据后,调用一个方法来填充 DataGrid:

    private void UpdateGrid(Users o)
    {
        Dispatcher.Invoke(() =>
        {
            var entities = o.OrderBy(e => e.Role);

            UsersDataGrid.FilteredItemsSource = entities;
            UsersDataGrid.DataContext = entities;
        });
    }

在这种情况下我做错了什么?

【问题讨论】:

  • ComboBox 中,您在哪里定义可供选择的选项?这些是什么类型的? Item 是什么?

标签: wpf xaml data-binding


【解决方案1】:

我查看了tutorial,发现我做错了什么。有几件事,但我如何解决它是创建一个具有我需要的值的自定义类(只有两个):

public class RoleList : List<string>
{
    public RoleList()
    {
        this.Add("Administrator");
        this.Add("Operator");
    }
}

接下来,我添加了类所在的命名空间:

xmlns:dm="clr-namespace:Coasters.ViewModels"

然后我添加了一个 Page.Resources 标记来保存我的新数据源:

<Page.Resources>
    <dm:RoleList x:Key="RoleList" />
</Page.Resources>

最后但同样重要的是,我实际上正确配置了 ComboBox(总是一件有用的事情),使用指向我的数据源的 ItemsSource,以及指向包含“Role”字段的类属性的 SelectedItem:

        <DataGridTemplateColumn Width="*">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource RoleList}" SelectedItem="{Binding Role}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

【讨论】:

    猜你喜欢
    • 2011-07-16
    • 2011-11-01
    • 2015-04-07
    • 1970-01-01
    • 2015-06-28
    • 2010-10-24
    • 2013-04-18
    • 2019-12-20
    • 1970-01-01
    相关资源
    最近更新 更多