【问题标题】:WPF MVVM Light dynamic list source on data grid数据网格上的 WPF MVVM Light 动态列表源
【发布时间】:2014-10-11 04:10:12
【问题描述】:

好的,我的应用程序中有一个管理屏幕。最初,计划是为每个实体创建一个数据网格,我们将隐藏/显示它们。我相信使用 ONE 数据网格有更好的方法来做到这一点。这样,我不需要为每个数据网格创建添加/编辑按钮(您不能有相同的名称),这会导致代码混乱并重写我认为可以动态化的东西。所以,我创建了一个名为 AdminDataGrid 的自定义类:

public class AdminDataGrid : DataGrid
{
    public AdminDataGrid()
    {
        Messenger.Default.Register<string>(this, "UpdateDataGrid", (action) => UpdateDataGrid(action));
        Messenger.Default.Register<ICollectionView>(this, "ReceiveDriverList", (x) => this.CurrentItemsSource = x);
    }


    public void UpdateDataGrid(string model)
    {
        switch (model)
        {
            case "Driver":
                Messenger.Default.Send<string>("GetDriversList", "GetDriversList");
                break;
            default:
                break;
        }
    }

    #region INPC

    public ICollectionView CurrentItemsSource { get { return (ICollectionView)GetValue(CurrentItemsSourceProperty); } set { SetValue(CurrentItemsSourceProperty, value); } }
    public static readonly DependencyProperty CurrentItemsSourceProperty =
        DependencyProperty.Register("CurrentItemsSource", typeof(ICollectionView), typeof(AdminDataGrid), new PropertyMetadata(null));

    #endregion
}

我的带有驱动程序列表的测试用例正在用于设置变量。这个想法是我正在使用当前的虚拟机,而不必将所有不同的服务注入到这个管理视图模型中。这是 XAML:

<localData:AdminDataGrid ItemsSource="{Binding CurrentItemsSource, UpdateSourceTrigger=PropertyChanged}"
                                         SelectionMode="Single" AlternatingRowBackground="Gainsboro" AutoGenerateColumns="True"
                                         SelectionUnit="FullRow" x:Name="LookupsDataGrid" Grid.Row="0" Grid.Column="1"/>

我知道这段代码有问题,因为当我从我的实体菜单中选择“驱动程序”选项时,它不会使用列表加载数据网格。 AdminDataGrid 类位于我作为单独类创建的实用程序文件夹中。

一旦我可以用我想要的任何东西填充数据网格,我就会在代码中运行一些逻辑来自定义我显示的列。所以目前,我的主要问题是:为什么当 ItemsSource 发生变化时数据网格没有更新?

【问题讨论】:

    标签: wpf xaml datagrid wpf-controls mvvm-light


    【解决方案1】:

    试试这个绑定。

     <localData:AdminDataGrid ItemsSource="{Binding CurrentItemsSource, RelativeSource={RelativeSource Mode=Self} , UpdateSourceTrigger=PropertyChanged}"
    

    您的 CurrentItemsSource 属性在同一个 DataGrid 中,因此您需要将其绑定到 Self RelativeSource

    【讨论】:

    • 哇。我不敢相信这就是我所需要的。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2016-05-12
    • 2013-11-18
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 2013-03-11
    相关资源
    最近更新 更多