我是WPF的新手并且在MVVM上工作,我有一个场景,我的数据网格没有得到更新,但它绑定的属性正在正确更新,我能够看到SlotFloorData属性中的新变化PropertyChanged事件。
下面是XAML代码(grid.row绑定到属性SlotFloorData):
<Page x:Class="CasinoCAD.V6.Views.DashboardView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vm="clr-namespace:CasinoCAD.V6.ViewModels"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
Title="DashboardView">
<Page.DataContext>
<vm:CasinoCADDViewModel x:Name="viewModel"/>
</Page.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="200"/>
<RowDefinition Height="200"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="Dashboard View" />
<DataGrid Grid.Row="1" Name="grdDB" ItemsSource="{Binding Path=SlotFloorData}" />
<!--<DataGrid Grid.Row="2" ItemsSource="{Binding Path=Properties }" />-->
</Grid>
</Page>
我在主模型中实现INotifyPropertyChanged,即在CasinoCADDViewModel
在DashboardView中,我只有下面(我在这里也试过了INotifyPropertyChanged,但它没有用):
如果我需要在此处提供任何其他信息,请告诉我
TIA!
答案 0 :(得分:4)
<强> CollectionChanged 强>
我假设您更改了SlotFloorData枚举的内容,并且您希望看到更改(添加和删除项目)。对?如果是,则枚举必须为收集器实现一些change-notification system。尝试使用ObservableCollection<T>
。它内置了这样的通知。您还可以通过实施INotifyCollectionChanged来构建您的。
<强>的PropertyChanged 强>
如果您更改项目本身并希望查看更改,则您的项目必须实现INotifyPropertyChanged,或者项目的属性必须是DependencyProperties。
ItemsSource参考已更改
最后是你真正改变ItemsSource的情况。这可能是您有一个没有更改通知的集合,您可以添加或删除项目。您将ItemsSource设置为null,然后将ItemsSource重置为古代集合。这不好,但会起作用。但是,如果您只将ItemsSource设置为相同的引用而不将其设置为null,则不会更改内容,因为属性系统看到它是相同的引用并且什么都不做。
我希望,上述陈述之一将引导您找到解决方案。
答案 1 :(得分:0)
设置为TwoWay绑定。
示例:
ItemsSource="{Binding Path=SlotFloorData, Mode=TwoWay}"
此外,将集合设为ObservableCollection
类型(如果尚未)。