有多种方法可以实现这一目标。一种方法是触发一个事件otherUserControl
并订阅你的事件MainWindow
并允许你MainWindow
更新myUserControl
.
我的用户控件 XAML
<TextBlock x:Name="TextValue">Initial Text</TextBlock>
其他用户控件 XAML
<Button Click="Button_Click">Click Me</Button>
其他用户控件 C#
public event EventHandler ButtonClicked;
private void Button_Click(object sender, RoutedEventArgs e)
{
if(this.ButtonClicked != null)
{
this.ButtonClicked(this, EventArgs.Empty);
}
}
主窗口 XAML
<StackPanel>
<vm:MyUserControl x:Name="MyUserControl"/>
<vm:OtherUserControl x:Name="OtherUserControl"/>
</StackPanel>
主窗口 C#
public MainWindow()
{
InitializeComponent();
this.OtherUserControl.ButtonClicked += OtherUserControl_ButtonClicked;
}
void OtherUserControl_ButtonClicked(object sender, EventArgs e)
{
this.MyUserControl.TextValue.Text = "Updated Text";
}
另一种选择是使用诸如Prism 事件聚合器之类的东西,它允许MyUserControl
订阅由引发的事件,OtherUserControl
而无需MainWindow
设置两者之间的通信。对于大型项目,这是一个更好的选择,因为它允许您的组件真正松散耦合。