1. 使用Application.Current.Properties
public partial class App : Application
{
public static string SharedValue { get; set; }
}
// 在A窗口中设置共享值
App.Current.SharedValue = "Some value";
// 在B窗口中读取共享值
string value = App.Current.SharedValue;
简单易用,不需要额外的类或结构。
只适合存储简单的数据类型,不适合复杂的数据对象。
在多线程环境下可能需要额外的同步机制。
适用于需要在应用程序的多个部分之间共享简单数据的情况。
2. 使用事件或委托
public class AWindow : Window
{
public event EventHandler<string> SharedValueChanged;
private void ChangeValue()
{
SharedValueChanged?.Invoke(this, "New Value");
}
}
public class BWindow : Window
{
public BWindow(AWindow aWindow)
{
aWindow.SharedValueChanged += OnSharedValueChanged;
}
private void OnSharedValueChanged(object sender, string e)
{
// Use the shared value
}
}
松耦合,发送方和接收方不需要知道对方的具体实现。
需要管理事件订阅和取消订阅,否则可能导致内存泄漏。
适用于需要在多个视图或视图模型之间动态传递数据的情况。
3. 使用消息机制
public class Messenger
{
public static void Send<TMessage>(TMessage message)
{
// Send message
}
public static void Register<TMessage, TReceiver>(TReceiver receiver, Action<TMessage> action)
{
// Register for message
}
}
// Sending a message
Messenger.Send("Shared Value");
// Registering for a message
Messenger.Register<string>(this, (message) => {
// Handle the message
});
解耦合,支持复杂的消息传递和数据共享。
需要引入额外的库或框架。
适用于复杂的应用程序,需要在多个组件之间传递消息或数据。
4. 使用单例类
public class Singleton
{
private static Singleton _instance;
public static Singleton Instance => _instance ?? (_instance = new Singleton());
public string SharedValue { get; set; }
}
// Setting shared value
Singleton.Instance.SharedValue = "Value";
// Getting shared value
string value = Singleton.Instance.SharedValue;
全局访问点,可以在任何地方访问共享数据。
可能导致全局状态管理混乱,不适合大型应用程序。
适用于需要全局访问点来管理共享数据的情况。
5. 使用数据绑定和ViewModel
public class MainViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _sharedValue;
public string SharedValue
{
get => _sharedValue;
set
{
_sharedValue = value;
OnPropertyChanged(nameof(SharedValue));
}
}
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
// In XAML
<Window.DataContext>
<local:MainViewModel />
</Window.DataContext>
<TextBlock Text="{Binding SharedValue}" />
遵循MVVM设计模式,实现视图与逻辑的分离。
需要实现
INotifyPropertyChanged
接口,增加了实现的复杂性。
适用于遵循MVVM设计模式的WPF应用程序。
总结
往期精品推荐: