如何使用MVVM在代码中将新网格添加到网格中

时间:2012-02-17 14:25:20

标签: wpf mvvm grid

如何将网格动态添加到另一个网格中?我不能这样做:

myGrid.Children.Add(dg);

因为我没有这个网格的实例 - 我正在使用MVVM。

请帮助。

2 个答案:

答案 0 :(得分:2)

我认为,既然你提到了MVVM,你想从View Model中完成这个吗?

在这种情况下,我的建议是从视图模型向视图发送消息。 在视图中添加订阅此消息并从那里添加网格。

你可以用最简单的形式做到这一点。这将使用优秀的MVVM Light framework

ViewModel.cs:

private void CreateGrid()
{
  Messenger.Default.Send<NotificationMessage>(new NotificationMessage("CreateGrid"));
}

View.xaml.cs:

Messenger.Default.Register<NotificationMessage>(this, nm =>
{
  if (nm.Notification != "CreateGrid") return;
  // Create grid here
});

答案 1 :(得分:1)

如果你是在运行时动态添加控件,简短的回答是你可能不会通过MVVM成功地做到这一点。将其放入代码隐藏可能是你最好的选择 - 不知道你正在构建什么类型的应用程序,很难通过判断并大声要求你必须使用MVVM。

话虽这么说,我很少发现自己处于WPF的情况,我必须像这样进行动态控制操作。相反,我结束使用不同的WPF结构(ListBox,ContentControl,ItemsControl等),以及像ItemTemplates这样的东西来获得我想要的东西。

同样,如果不了解您想要完成的任务,就很难提供任何形式的指导性指导。