2011-01-21 19 views
0

私は非常にWPFの新しいMVVMで作業していますが、私のデータグリッドは更新されていませんが、私はPropertyChangedイベント中にSlotFloorDataプロパティの新しい変更を見ることができます。以下 ビューが更新されていません(MVVM)が関連付けられているプロパティが正しく更新されています

は(grid.rowが財産SlotFloorDataにバインドされた)XAMLコードです:私はCasinoCADDViewModel

にし、DashboardViewでメインモデルIEでINotifyPropertyChangedのを実装しています

<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> 

、私は、以下の(Iを持っています)ここにもINotifyPropertyChangedのを試してみましたが、それはうまくいきませんでした:

私は他の情報を配置する必要がある場合、私に知らせてください、ここで

TIA!

+1

SlotFloorDataプロパティの値を実際に変更しているのですか、単にコレクションの内容を変更していますか? –

+0

ViewModelを少し見てみたいと思います。コレクションの種類と更新方法を見ることができるように、十分な情報があれば助かります。 – Goblin

答えて

0

TwoWay Bindingとして設定します。

例:

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

また、コレクションObservableCollectionタイプ(まだない場合)を作ります。

+2

ItemsSourceのTwoWayバインディングは必要ありません。コントロールがコレクションを更新すると、アイテムを追加または削除し、コレクションを置き換えません。 –

+0

メッセージ読み取り専用プロパティSlotFloorDataを取得すると、twowayはそれに対応できません。以下はコードです。public IEnumerable SlotFloorData { get {return _slotdata; } プライベートセット { if(_slotdata!= value) { _slotdata = value; OnPropertyChanged( "SlotFloorData"); } } } –

+0

@Thomas:PropertyChangeイベントの後にSlotFloorDataの変更が表示されますが、初期ロード時にグリッドに表示されない理由がわかりません。データを見ることができます。そこに残り、SlotFloorDataにある新しいデータでリフレッシュされません。 –

4

は、私はあなたがSlotFloorData列挙の内容を変更し、変更(項目の追加や削除を)見ることを期待していることと仮定し
をて、CollectionChanged。右?はいの場合、コレクションの列挙にはchange-notification systemを実装する必要があります。 ObservableCollection<T>をお試しください。そのような通知が組み込まれています。また、INotifyCollectionChangedを実装することであなたの上に構築することができます。

を使用すると、アイテムのitselfsを変更し、変更内容を確認したい場合は、あなたのアイテムがINotifyPropertyChangedを実装しなければならないか、アイテムのプロパティがDependencyPropertiesでなければなりません
をにPropertyChanged。

のItemsSourceリファレンス
を変更し、最後に、あなたが本当にのItemsSourceを変更する場合があります。これは、変更通知のないコレクションがあり、アイテムを追加または削除したことが原因である可能性があります。 ItemsSourceをnullに設定し、ItemsSourceを古代コレクションにリセットしました。これは素晴らしいことではありませんが、うまくいくでしょう。ただし、以前にnullに設定せずにItemsSourceを同じ参照に設定した場合、プロパティシステムは同じ参照であるとみなして何もしないので内容は変更されません。

上記の声明の1つがあなたを解決に導くことを願っています。

関連する問題