Представление не обновляется (MVVM), но связанное свойство обновляется правильно - PullRequest
0 голосов
/ 21 января 2011

Я очень новичок в 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, но это не сработало):

Пожалуйста, дайте мне знать, если мне нужно разместить любую другую информацию здесь

ТИА!

Ответы [ 2 ]

4 голосов
/ 21 января 2011

CollectionChanged
Я предполагаю, что вы изменяете содержимое перечисления SlotFloorData и ожидаете увидеть изменения (добавление и удаление элементов). Правильно? Если да, перечисление должно реализовать некоторую систему уведомлений об изменениях для сборов. Попробуйте использовать ObservableCollection<T>. В него встроено такое уведомление. Вы также можете создать его, реализовав INotifyCollectionChanged .

PropertyChanged
Если вы изменяете сами элементы и хотите видеть изменения, ваши элементы должны реализовать INotifyPropertyChanged , или свойства элементов должны быть DependencyProperties.

ItemsSource Reference изменен
И последний случай, когда вы действительно меняете ItemsSource. Это может быть связано с тем, что у вас есть коллекция без уведомления об изменении, и вы добавляете или удаляете элементы. Вы устанавливаете ItemsSource в null, а затем сбрасывает ItemsSource в древнюю коллекцию. Это не приятно, но будет работать. Однако, если вы устанавливаете для ItemSource только одну и ту же ссылку, но не устанавливаете ее в null, содержимое не будет изменено, поскольку система свойств видит, что это та же самая ссылка, и ничего не делает.

Я надеюсь, что одно из приведенных выше утверждений приведет вас к решению.

0 голосов
/ 21 января 2011

Установить как Двухстороннее связывание.

Пример:

ItemsSource="{Binding Path=SlotFloorData, Mode=TwoWay}"

Кроме того, сделайте коллекцию типа ObservableCollection (если это еще не сделано).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...