【问题标题】:How do you attach a behavior in the ViewModel, using MVVM如何使用 MVVM 在 ViewModel 中附加行为
【发布时间】:2014-10-30 22:18:51
【问题描述】:

出于问题的目的,假设我有一个简单的 XAML 视图,上面有一个 Grid。根据 MVVM,视图具有视图模型。架构师已决定视图模型不得对视图有任何引用。

在我的视图模型上,我有一个 DataTable 对象,它用作视图中网格的数据源。我在视图模型上动态添加了几列。如果我想在这些列上附加一个行为,在它们在代码上创建之后,你会怎么做?

【问题讨论】:

  • 详细了解 Blend SDK、交互/交互性命名空间。
  • 请注意,由于与INotifyPropertyChanged 一起使用的事件系统,您可能永远真正没有对视图的引用(实际上我曾有人就此与我争论过)。您不希望对视图进行强类型引用,但有可能将原则走得太远......
  • 老实说,我会从视图模型中引用视图并添加行为。我知道这不是你想要的,但没有太多的选择。

标签: c# .net wpf mvvm prism


【解决方案1】:

您可以在DataGrid 上注册AutoGeneratingColumn 活动。

在里面,您可以通过DataGridAutoGeneratingColumnEventArgs 对象的Column 属性访问新生成的列。

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    // Customization: e.Column. ...
}

【讨论】:

  • 这意味着VM可以访问视图或者视图后面的代码中有代码,作者已经声明他不想要这两种代码。
  • @Kelly 它在哪里指定 OP 不想在视图中包含代码,我看到的唯一约束(这是一个非常合理的约束)是“架构师已经决定视图模型不能有任何对视图的引用”?...
  • @Pragmateek 谢谢,虽然这不是我期待的答案,但这是我能得到的最接近的工作解决方案。
猜你喜欢
  • 2016-12-22
  • 2012-07-31
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 1970-01-01
  • 2013-11-10
相关资源
最近更新 更多