Binding 是一个很好的解决方案,但您有静态属性,因此您不能直接使用绑定基础结构来获取更新通知,因为不涉及 DependencyObject(或实现 INotifyPropertyChanged 的对象实例)。
如果值确实发生了变化,并且您需要在主窗口中更新 TextBlock 的值,您可以创建一个单例而不是静态类来包含该值并绑定到该值。
单例示例:
public class HelperClass : DependencyObject {
public static readonly DependencyProperty ActiveDepartmentProperty =
DependencyProperty.Register( "ActiveDepartment", typeof( Department ),
typeof( HelperClass ), new UIPropertyMetadata( "" ) );
public Department ActiveDepartment {
get { return (Department) GetValue( ActiveDepartmentProperty ); }
set { SetValue( ActiveDepartmentProperty, value ); }
}
public static HelperClass Instance { get; private set; }
static HelperClass() {
Instance = new HelperClass();
}
}
因此绑定将像下面的示例一样工作:
<TextBox Text="{Binding Source={x:Static local:HelperClass.Instance}, Path=ActiveDepartment.Name}"/>
这可能看起来很难,仅此而已。您可以改用events model 并将事件添加到您的HelperClass。 MainWindow 可以添加事件处理程序并在事件引发时更改 activeDepartmentTextBlock 值。
public MainWindow()
{
InitializeComponent();
HelperClass.Instance.DepartmentChanged += OnDepartmentChanged;
}
private void OnDepartmentChanged(Department newDepartment)
{
activeDepartmentTextBlock.Text = newDepartment.Name;
}
更新。如果您想获得最简单的解决方案,您可以打破封装原则并将MainWindow 作为参数传递给DialogWindow 并使activeDepartmentTextBlock 公开。因此,您将能够在DialogWindow 的字段中保存指向MainWindow 的链接,并在需要时更改DialogWindow 中的文本:
this.mainWindow.activeDepartmentTextBlock.Text = HelperClass.ActiveDepartment.Name;