2

我有代表我的班级,AppSettings 我有Main窗户和Settings窗户。

每个窗口都包含对象的实例AppSettings

所以这是两个不同的对象。如果窗口中的对象发生更改,则更改不会反映在窗口AppSettings中。SettingsAppSettingsMain

有什么方法可以AppSettings在 Windows 之间共享对象,所以我只有一个实例?

我尝试创建共享基类但出现错误

Partial declarations of "class name" must not specify different base classes    
4

5 回答 5

2

您可以在一个类中创建静态属性,并在其他类中的该静态属性上创建包装器属性。

此外,如果您将此属性绑定到您的 UI,那么您不需要两个属性..您可以绑定到静态实例。

于 2013-09-27T17:15:32.460 回答
2

我知道这个答案是对主题的冲击,但我发现了其他更简单的方法来做被问到的事情,这样将来可以帮助任何人。在每个 WPF 应用程序中,都会创建 app.xaml 和 app.xaml.cs。因此,在 app.xaml.cs 中创建一个设置对象,它看起来像这样:

namespace WpfApplication
{    
    public partial class App : Application
    {
        // Settings :
        public int setting_1 { get; set; } //some setting variable
        public string setting_2 { get; set; } //some other setting variable
    }
}     

现在要从不同的窗口引用这个对象,您可以使用:((App)Application.Current).setting_1

于 2015-10-22T13:32:04.897 回答
1

有什么方法可以在 Windows 之间共享 AppSettings 对象,所以我只有一个实例?

您需要一些方法让两个窗口获得相同的参考。如果您将对同一个对象的引用传递AppSettings给两个 Windows,这应该可以正常工作。

于 2013-09-27T17:15:28.973 回答
0

你可以在你的项目中有一个像“Utils”这样的类,它的属性如下:

Public Shared(or Static in C#) AppSettings  As YourObjectType

然后在窗口的 xaml 中使用 Utils.AppSetings 以两种方式进行绑定

于 2013-09-27T17:16:21.260 回答
0

当然有。您可以AppSettings在两个窗口中创建属性DependencyProprerties,然后在创建窗口时将属性绑定SettingsMain窗口的属性Settings。也就是说,在 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); }
    }

}

然后,在Mainwindow类的代码后面:

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则会通知更改并更新其副本。

于 2013-09-27T17:24:18.443 回答