0

次のような TextBlock があります。

<TextBlock Text="{Binding Name}" />

これは<Canvas>、ViewModel にある MyClient に設定された DataContext の内部にあります。

public Client MyClient { get; private set; } // This is a RIA Entity, hence supports INotifyPropertyChanged

public ViewModel() {
    MyClient = new Client();
    LoadOperation<Client> loadClient = RiaContext.Load<Client>(RiaContext.GetClientsQuery());
    loadClient.Completed += new EventHandler(loadClient_Completed);
}

void loadClient_Completed(object sender, EventArgs e) {
    MyClient = DB.Clients.Single();
}

上記のように MyClient を設定しても、PropertyChanged イベントは発生しません。そのため、UI は更新されません。

4

3 に答える 3

0

OneWay または TwoWay バインディングを設定する必要があります。

<TextBlock Text="{Binding Name, Mode=OneWay}" />
<TextBlock Text="{Binding Name, Mode=TwoWay}" />

デフォルトでは、バインディングは OneTime を行うと思います。

于 2009-09-14T19:27:59.057 に答える
0

UI がアタッチされているオブジェクトを置き換えるため、UI は更新されません。置換は、loadClient_completed メソッドで行われます。

于 2010-06-10T21:05:18.667 に答える
0

これが私がやったことです。RIA コールバックが完了したときにトリガーされるイベントを追加しました。次に、DataContext を ViewModel に設定するビューで、ハンドラーをこれにアタッチします。つまり、ViewModel がデータを取得するまで待機してから、DataContext を ViewModel に設定して、正しいデータを取得します。

于 2009-09-01T09:46:49.500 に答える