0
元のMainWindow.xamlのサイズが大きすぎるため、管理が困難です。そこでそれらを複数のユーザーコントロールに分けます。しかし、次の問題が発生しました.UserControl_2の1つのコントロールは、UserControl_1内のListViewの選択を参照しています。私はバインディングを変更しようとしましたが、期待どおりに動作していませんでした。別のユーザーコントロールに正しくバインドする方法はありますか?別のユーザーコントロールからのカスタムユーザーコントロール内の組み込みコントロールのプロパティへのバインド
MainWindow.xaml:
<Window x:Class="MyApp.MainWindow" ...>
<Grid>
<view:UserControl_1/>
<view:UserControl_2/>
</Grid>
</Window>
UserControl_1.xaml:
<UserControl x:Class="MyApp.views.UserControl_1 ...>
<Grid>
<ListView x:Name="MyListView" />
</Grid>
</UserControl>
UserControl_2.xaml
<UserControl x:Class="MyApp.views.UserControl_2 ...>
<Grid>
<Button Content="Test"
Command="TestCommand"
CommandParameter="{Binding Path=MyListView.SelectedIndex,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl_1}}}"
</Grid>
</UserControl>
リストと同じユーザーコントロールで一緒にそれを参照するボタンを保つためにクリーナーアプローチ。 – CodexNZ
UserControl_1でSelectedIndex依存関係プロパティを宣言し、UserControl_2でCommandParameter依存関係プロパティを宣言します。 RelativeSourceバインディング(それぞれのXAMLの内部)によってそれぞれのUI要素にバインドします。 MainWindowで、UserControl_2.CommandParameterをUserControl_1.SelectedIndexにバインドします。 – Clemens
あなたの問題はあなたのデザインが悪いという事実から来ています。 UserControlsはUIの再利用可能なビットを包含し、他のコントロールと同様に設計する必要があります(TextBoxにTextプロパティをバインドするなど)。DataTemplatingで使用する特定のモデル/ビューモデル用に設計する必要があります(PersonのPersonEditor )。 UserControlsを使用してUIをより小さな塊にスライスしないでください。あなたが見つけたように、それらのスライスは懸念を横切り、結束を妨げる可能性があります。 – Will