【发布时间】: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