40139


ModelView側で以下のようなデータプロパティを持っており、

[code]

    public ObservableCollection<DispData> DispCollection { get; set; }
    
[/code]

DispDatanに以下のようなデータを持っています

[code]

    public string Test { get; set; }
    
[/code]

View側で以下のようにバインドしています。

[code]

     <DataGrid ItemsSource="{Binding DispCollection}">
     ～
     <DataGridTextColumn Header="test"  Binding="{Binding Test}" IsReadOnly="True"/>
     ～
    
[/code]

ModelViewのコンストラクタで、以下としていると、無事に表示できていることが確認できたのですが、

[code]

     this.DispCollection.Add(new DispData { Test = "A" });
    
[/code]

たとえば、以下のような別のプロパティイベントハンドラの値によって、  
DispCollectionにAddする、もしくは現状のデータを更新したい場合はどのようにすべきなのでしょうか？

[code]

    private static void DataChanged(object sender, PropertyChangedEventArgs e)
    {
    }
    
[/code]

staticであるため、「this.DispCollection」でアクセスできずに困っています。

ModelViewのインスタンスをstaticにして、Instance.DispCollectionでは…と思って試してみたのですが、  
画面は更新されませんでした…。

[code]

    private static TestViewModel instance = new TestViewModel();
    
    public static TestViewModel Instance
    {
     　get{
                return mInstance;
       }
    }
    
[/code]


CC BY-SA 3.0
2017-12-07T12:55:53.683
40115
2017-12-08T10:41:46.503
12842
question
c#
C#での画面表示のバインドについて（イベントハンドラ経由で画面を更新させたい）


`private
static`ですので`TestViewModel`が自発的に`static`にしているだけのように思われますが。単純に`static`と指定しなければいいのでは？

なお参考までにメインウィンドウのビューモデルを`static`に取得する方法を記載しておきます。ただVMからこれを使うのははっきり言って設計ミスです。

[code]

    Application.Current.MainWindow.DataContext as TestViewModel;
    
[/code]


CC BY-SA 3.0
2017-12-08T10:41:46.503
40139
2017-12-08T10:41:46.503
5750
40115
answer