2

AppSettings 私はMainウィンドウとウィンドウを持っていることを表すクラスを持っていSettingsます。

各ウィンドウには、オブジェクトのインスタンスが含まれていますAppSettings

したがって、これらは2つのオブジェクトが異なります。AppSettingsウィンドウ内のオブジェクトSettingsが変更された場合、その変更はウィンドウに反映されませAppSettingsMain

ウィンドウ間でオブジェクトを共有しAppSettingsてインスタンスを 1 つしか持たない方法はありますか?

共有基本クラスを作成しようとしましたが、エラーが発生しました

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

5 に答える 5

2

1 つのクラスで静的プロパティを作成し、別のクラスでその静的プロパティにラッパー プロパティを作成できます。

また、このプロパティを UI にバインドする場合、2 つのプロパティは必要ありません。静的インスタンスにバインドできます。

于 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

ウィンドウ間で AppSettings オブジェクトを共有してインスタンスを 1 つしか持たない方法はありますか?

両方のウィンドウが同じ参照を取得するには、何らかの方法が必要です。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バインドできます。つまり、SettingsWindow クラスでは次のようになります。SettingsMainSettings

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と、 に変更が通知され、そのコピーが更新されます。

于 2013-09-27T17:24:18.443 に答える