好的,我的应用程序中有一个管理界面。最初,计划是为每个实体建立一个数据网格,我们将隐藏/显示它们。我相信有一个更好的方法来实现一个数据网格。这样,我不需要为每个数据网格创建“添加/编辑”按钮(您不能使用相同的名称),这会导致代码混乱并重新编写我认为可以动态化的内容。所以,我创建了一个名为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更改时数据网格不会更新?
答案 0 :(得分:1)
尝试此绑定。
<localData:AdminDataGrid ItemsSource="{Binding CurrentItemsSource, RelativeSource={RelativeSource Mode=Self} , UpdateSourceTrigger=PropertyChanged}"
您的CurrentItemsSource属性位于同一DataGrid中,因此您需要将其绑定到Self RelativeSource