[英]Passing data between two opened windows
我不知道您是否使用 MVVM 模式,但无论如何您都可以使用“消息传递”库:
示例: MVVM Light Messenger您可以在此处找到详细信息MVVM Light Messenger
基本用法是
public class ViewModelA : ViewModelBase
{
public void SearchCommandMethod()
{
MessengerInstance.Send<NotificationMessage>(new NotificationMessage("notification message"));
}
}
public class ViewModelB : ViewModelBase
{
public EmployeeListViewModel()
{
MessengerInstance.Register<NotificationMessage>(this, NotifyMe);
}
public void NotifyMe(NotificationMessage notificationMessage)
{
string notification = notificationMessage.Notification;
//do your work
}
}
请记住,这只是一个基本示例。 检查用户选择与否的数据总是好的。 这不是您问题的唯一解决方案。 在我看来,更重要的是了解底层系统以及在 windows 之间传输数据的意义,然后再从此处复制解决方案。
这是一个非常简单的示例,如何在 windows 之间传递数据:它只是一个带有私有 setter 的公共属性。 用户单击按钮选择类别后,属性被设置,window 被关闭。
private void BtnCategory_Click(object sender, RoutedEventArgs e)
{
CategoryWindow categoryWindow = new CategoryWindow();
categoryWindow.ShowDialog();
if(string.IsNullOrEmpty(categoryWindow.CategoryTitle))
{
// category is empty or not set
}
else
{
// category is set and not empty
}
}
public partial class CategoryWindow : Window
{
public string CategoryTitle { get; private set; }
public CategoryWindow()
{
InitializeComponent();
}
private void BtnChoose_Click(object sender, RoutedEventArgs e)
{
CategoryTitle = GetSelectedCategory();
this.Close();
}
private string GetSelectedCategory()
{
return string.Empty; // Return the selected Category here... string.Empty is just a placeholder!
}
}
如果 windows 都必须保持打开状态,也许事件对您来说是正确的。 当用户选择一个类别时触发一个事件。 其他 windows 可以订阅此事件以获取通知。
private void BtnCategory_Click(object sender, RoutedEventArgs e)
{
CategoryWindow categoryWindow = new CategoryWindow();
categoryWindow.OnCategoryChanged += CategoryChanged;
categoryWindow.Show();
}
private void CategoryChanged(object sender, CategoryChangedEventArgs e)
{
if (string.IsNullOrEmpty(e.Category))
{
// category is empty or not set
}
else
{
// category is set and not empty
}
}
public partial class CategoryWindow : Window
{
public EventHandler<CategoryChangedEventArgs> OnCategoryChanged;
public CategoryWindow()
{
InitializeComponent();
}
private void BtnChoose_Click(object sender, RoutedEventArgs e)
{
var selectedCategory = GetSelectedCategory();
OnCategoryChanged?.Invoke(this, new CategoryChangedEventArgs(selectedCategory));
}
private string GetSelectedCategory()
{
return string.Empty; // Return the selected Category here... string.Empty is just a placeholder!
}
}
public class CategoryChangedEventArgs : EventArgs
{
public string Category { get; private set; }
public CategoryChangedEventArgs(string category)
{
Category = category;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.