视图未获得更新(MVVM),但关联的属性正在正确更新

时间:2011-01-21 20:16:11

标签: wpf mvvm

我是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!

2 个答案:

答案 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类型(如果尚未)。