これを実現する方法はいくつかあります。1つの方法は、でイベントを発生otherUserControl
させ、でそのイベントをサブスクライブして、を更新MainWindow
できるようにすることです。MainWindow
myUserControl
MyUserControl XAML
<TextBlock x:Name="TextValue">Initial Text</TextBlock>
OtherUserControl XAML
<Button Click="Button_Click">Click Me</Button>
OtherUserControl C#
public event EventHandler ButtonClicked;
private void Button_Click(object sender, RoutedEventArgs e)
{
if(this.ButtonClicked != null)
{
this.ButtonClicked(this, EventArgs.Empty);
}
}
MainWindow XAML
<StackPanel>
<vm:MyUserControl x:Name="MyUserControl"/>
<vm:OtherUserControl x:Name="OtherUserControl"/>
</StackPanel>
MainWindow C#
public MainWindow()
{
InitializeComponent();
this.OtherUserControl.ButtonClicked += OtherUserControl_ButtonClicked;
}
void OtherUserControl_ButtonClicked(object sender, EventArgs e)
{
this.MyUserControl.TextValue.Text = "Updated Text";
}
もう1つのオプションは、Prism Event Aggregatorのようなものを使用することです。これにより、2つの間の通信をセットアップしなくても、MyUserControl
によって発生したイベントをサブスクライブできます。これは、コンポーネントを本当に緩く結合できるため、大規模なプロジェクトでははるかに優れたオプションです。OtherUserControl
MainWindow