当然有。您可以在两个窗口DependencyProprerties
中创建AppSettings
属性,然后在创建Settings
窗口时将Settings
中的属性绑定到Main
窗口的属性。也就是说,在SettingsWindow类:
partial class SettingsWindow : Window {
public static readonly DependencyProperty AppSettingsProperty("AppSettings", typeof(AppSettings), typeof(SettingsWindow), new PropertyMetaData(null));
public AppSettings AppSettings {
get { return (AppSettings) GetValue(AppSettingsProperty); }
set { SetValue(AppSettingsProperty, value); }
}
}
然后,在Main
窗口类的代码背后:
partial class MainWindow : Window {
public static readonly DependencyProperty AppSettingsProperty("AppSettings", typeof(AppSettings), typeof(MainWindow), new PropertyMetaData(null));
public AppSettings AppSettings {
get { return (AppSettings) GetValue(AppSettingsProperty); }
set { SetValue(AppSettingsProperty, value); }
}
private void ShowSettingsWindowButton_Click(object sender, RoutedEventArgs e) {
SettingsWindow settingsWindow = new SettingsWindow();
Binding appSettingsBinding = new Binding("AppSettings");
appSettingsBinding.Source = this;
appSettingsBinding.Path = new PropertyPath("AppSettings");
appSettingsBinding.Mode = BindingMode.TwoWay;
BindingOperations.SetBinding(this, AppSettingsProperty, appSettingsBinding);
settingsWindow.ShowDialog();
}
}
的Binding
机制将保持性能的两个对象同步。因此,如果在SettingsWindow
处于打开状态时用一个不同实例替换一个类中的属性值,则会通知SettingsWindows
该更改并更新其副本。
我试图做到这一点通过从'System.Windows继承基类。窗口“,但没有办法 – Sreginogemoh
@Sreginogemoh这只会在你使用单个静态变量时起作用,但通常将这些传递给Window的构造函数或设置属性等效果更好。 –