1

私のxamlには、次のようなものがあります。

<TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem">
        <Setter Property="IsExpanded" Value="{Binding Path=IsExpandedOverridedInModelView, Mode=TwoWay}"/>
    </Style>
</TreeView.ItemContainerStyle>

このコードは完全に機能します。

TreeViewは、DataLayer階層をラップするModelView階層(MVVM)にバインドされています。別の階層の階層ラッパー。私の制限されたModelView階層は、(IsSelectedおよびIsExpandedOverridedInModelView)のようないくつかのプロパティを追加します。このコードは主に、TreeView.IsExpandedプロパティと私のModelView階層プロパティ「IsExpandedOverridedInModelView」の間のバインディングを定義します。

しかし、私が理解できなかったことがあります...

TreeViewItemクラスには「IsExpandedOverridedInModelView」というプロパティがないことは誰もが知っています。このプロパティは、基になるオブジェクト(TreeViewItemの背後にあるModelView内のオブジェクト)の一部である場合。2つの関連する質問があります:

  • その宣言を可能にするものは何ですか?その振る舞いを可能にするひねりは何ですか?
  • 「シンボル'IsExpandedOverridedInModelView'を解決できません」という〜"警告"を削除するためにそれを宣言する方法(クリーンな方法でそれを宣言する方法)?

TreeViewItemはDynamicObjectから派生すると思いましたが、そうではありません。

4

1 に答える 1

3

TreeViewItem IsExpandedプロパティあります。そうでないことを示す警告は、IDE がらくたの結果です。そして、バインディングはDataContext、デザイナーを使用しない限り、実行時にのみ評価されるそのようなプロパティを持つ場合と持たない場合がある を参照します (繰り返しますが、そこからの警告は単なる IDE のがらくたです)。

于 2012-04-23T14:32:28.547 に答える