WPF MVVM Light数据网格上的动态列表源

时间:2014-08-18 09:25:47

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

好的,我的应用程序中有一个管理界面。最初,计划是为每个实体建立一个数据网格,我们将隐藏/显示它们。我相信有一个更好的方法来实现一个数据网格。这样,我不需要为每个数据网格创建“添加/编辑”按钮(您不能使用相同的名称),这会导致代码混乱并重新编写我认为可以动态化的内容。所以,我创建了一个名为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
}

我的驱动程序列表的测试用例正在设置变量。我的想法是,我正在使用当前的VM,而不必将所有不同的服务注入此Admin视图模型。这是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"/>

我知道这段代码有问题,因为当我选择&#39; Driver&#39;我的实体菜单中的选项不会将数据网格加载到列表中。 AdminDataGrid类位于我作为单独的类创建的实用程序文件夹中。

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

1 个答案:

答案 0 :(得分:1)

尝试此绑定。

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

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