有很多方法可以實現這一點。一種方法是在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);
}
}
主窗口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 Event Aggregator這將使MyUserControl
訂閱由OtherUserControl
引發的事件,而不需要MainWindow
設置通信兩者之間。這對於大型項目來說是一個更好的選擇,因爲它可以讓您的組件真正鬆散耦合。
我用Mediator。奇蹟般有效。謝謝。 – Yuri 2012-07-09 15:49:35