Visibilityプロパティが親ExpanderコントロールのIsExpandedにバインドされているGridがあります。
Grid.Visibilityが変更されるたびに、それに応じてDataContext (ビュー モデル)のプロパティ ( MyProperty )を変更する必要があります。
これは私のXAMLです:
<Grid Visibility="{Binding IsExpanded, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}}, Converter={StaticResource BoolToVisibilityConverter}}" />
以下を使用して、ビューコンストラクターでバインディングをプログラムで設定しようとしました。
grid.SetBinding(VisibilityProperty, new Binding("MyProperty") { Source = DataContext });
ただし、これは XAML で既に設定されているExpanderへのバインディングを置き換えるだけです。
これをひっくり返して、ターゲットがビューモデルでソースが代わりにグリッドになるようにし ( Visibilityにバインド)、MyPropertyを依存関係プロパティにすることを検討しました。しかし、私のビュー モデルはDependencyObjectではないため、これを行うことはできません。
MultiBinding / MultiConverterバインディングGrid.VisibilityをExpander.IsExpandedおよびMyPropertyに使用しようとしましたが、これには目的の効果がありません。Expander.IsExpandedの変更の結果としてGrid.Visibilityが更新された場合、MyPropertyはGrid.Visibilityに変更されません。
機能しているように見える唯一のオプションは、 Expander.IsExpandedにバインドするGridの添付プロパティを使用し、コールバック関数を使用して、添付プロパティが変更されるたびにGrid.Visibilityをプログラムで変更することです。次にGrid.VisibilityがMyPropertyにバインドされます。これは面倒な方法のように思えますが、私は提案を受け付けています。
私がやろうとしているのは、2 つのバインディングが反対方向にある 2 つのバインディングのようなもので、1 つは依存関係プロパティからのもので、もう 1 つは CLR プロパティへのものであると思います。
与えられることができるどんな助けにも感謝します!!