6

データバインディングを使用してWPFフレームの初期コンテンツを設定できますが、バインドされたプロパティへのその後の変更(INotifyPropertyChangeを使用して実装)はコンテンツを変更しないようです。

また、この方法でContentプロパティに直接バインドすると、バインドされたアイテムがFrameまたはNavigationWindowのジャーナルに表示されるかどうかを誰かが知っていますか?

いくつかのコンテキスト:おそらくNavigationServiceを使用してフレームと対話する必要があることを認識していますが、MVVMパターンに従おうとしています。Contentプロパティにデータバインドする方がはるかに簡単なようです...

4

4 に答える 4

7

フレームに対してデータバインディングを使用できますが、バインディングのモードがTwoWayに設定されていることを確認する必要があります。

XAML:

<Frame Content={Binding Path=MyProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged} />

モデルの表示:

public class MyViewModel : INotifyPropertyChanging, INotifyPropertyChanged
{
  public Page MyProperty
  {
    get
    {
      return _viewModelPage;
    }

    set
    {
      this.OnPropertyChanging("MyProperty");
      _viewModelPage = value;
      this.OnPropertyChanged("MyProperty");
    }
  }
}
于 2010-05-13T07:11:53.080 に答える
4

WPFコミュニティの多くは、組み込みのナビゲーションフレームワークが壊れていることに同意しています。ただし、これを使用する場合でも、Contentプロパティをバインドすることは正しいアプローチではありません。ナビゲーションでMVVMを使用する場合は、それをFrontControllerパターンと組み合わせる必要があります。このパターンでは、ViewModelがナビゲーション要求をコントローラーにディスパッチし、コントローラーがその要求を解決します。(前述したように)多くの開発者がWPFの組み込みナビゲーションを使用しているため、この概念の例は多くありません。

WPF用の非常に堅牢なナビゲーションエンジンを確認する場合は、 nRouteを確認してください。これは、WPFへのMVCルーティングエンジンのポートです。

于 2010-04-26T13:29:56.460 に答える
0

フレームはナビゲーションホストであるため、NavigationServiceを使用して別のコンテンツに移動する方が適切です。INotifyPropertyChangeを使用する場合、コンテンツが変更されるたびに関連イベントを呼び出すと思います。それなら、代わりにNavigationServiceを使うのも難しいことではないと思います。

于 2010-04-23T19:13:26.580 に答える
0

私は数日前にこの問題に遭遇しました。フレーム付きのメインウィンドウがあり、フレームにさまざまなページをロードしました(を使用してNavigate())。ページのデータバインディングが壊れていて、ロードされたページにデータが表示されませんでした。

DataContextバインディングを修復するには、フレーム内のページに既存のものを作成または与えると、バインディングが再び機能します。

于 2015-06-03T07:26:40.393 に答える