我对VM通信有疑问。
这是我在C#/ WPF应用程序中的代码。在我的MainWindow.xam上,我有一个按钮。 点击此按钮, 我需要从另一个ViewModel中访问和修改ProductList集合。 我该如何做到这一点?
public List<ProductInfo> ProductList { get; private set; }
private MainWindow m_mvWindow = null;
public MainWindowViewModel(MainWindow window)
{
this.m_mvWindow = window;
}
MainWindow.xaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowViewModel(this);
}
}
感谢。
答案 0 :(得分:2)
最简单的解决方案是将您的其他VM作为MainWindowViewModel
的属性公开,向子VM传递对ProductList集合的引用,并在子VM上绑定一个ICommand,该ICommand绑定到XAML中的按钮并处理集合修改。
这样的事情:
主虚拟机
public class MainViewModel
{
<!-- Your stuff ->
public ChildViewModel ChildViewModel
{
if(_childViewModel == null)
{
_childViewModel = new ChildViewModel(ProductList)
}
return _childViewModel;
}
}
子VM
public class ChildViewModel
{
private List<ProductInfo> _products;
public DelegateCommand ClearCollection {get; set;}
public ChildViewModel(List<ProductInfo> products)
{
_products = products;
ClearCollection = new DelegateCommand(OnClearCollection);
}
private void OnClearCollection()
{
_products.Clear();
}
}
在xaml ......
<Button Command={Binding ChildViewModel.ClearCommand} Content="..." />
答案 1 :(得分:0)
您可以使用以下任一方式: