问题标签 [mvvm-toolkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
28 浏览

wpf - 在 DataGrid 中绑定数据时,CommandParameter 未传递给 CanExecute(CanExecute 参数为空)

我正在使用Microsoft.Toolkit.Mvvm nuget 包在 .NET Core 3.1 上构建 WPF 应用程序。

我在绑定 Datagrid 的 DataGridTemplateColumn 中的按钮的 CommandParameter 时遇到问题。

我在我的视图模型上定义了一个 RelayCommand,使用 IRelayCommand,并定义了一个带有参数的 CanExecute 方法。然后,我将按钮绑定的 CommandParameter 绑定到数据网格行的数据。

在运行时,我看到我的数据网格的每一行都调用了 CanExecute 方法,但是参数值始终为空。如果我的 ObservableCollection 中有 5 个项目,我会看到 CanExecute 被调用了 5 次,3 个项目...... 3 次。在所有情况下,该值为空。

下面是用于创建 TestModel 类型的 ObservableCollection 的视图模型的代码。创建了一个 RelayCommand,CanExecute 的标准被简化为仅比较数据绑定模型的 name 属性。

我在这里期望的是,对于除名称为“Test2”的行之外的所有行,绑定按钮都将被启用。Test2 行中的按钮将被禁用。

这是我的视图模型和相关的模型类。

还有我的 Datagrid 的 xaml

我在这里想念什么?我在其他 WPF 应用程序中无数次使用这种方法。这是我第一次使用这个工具包(我之前使用过 MVVMLight),也是第一次在 .NET Core 上构建 WPF。这是 .NET Core 上 WPF 的变化吗?两个 MVVM 工具包之间有什么不同吗?

您可以提供的任何帮助或指导将不胜感激,谢谢。

0 投票
1 回答
110 浏览

c# - CanExecute 仅部分有效

我正在开发一个 WPF .NET 5 应用程序,该应用程序需要使用按钮命令来处理更长的任务。在任务完成之前,应禁用该按钮。我正在使用 Microsoft.Toolkit.Mvvm 的 RelayCommand:
BtnCmd = new RelayCommand(DoSomething, CanDoSomething);
DoSomething 方法所做的第一件事就是将返回值设为CanDoSomethingfalse。这可以防止 DoSomething 再次被执行,但它在 Button 上是不可见的。
在研究时,我发现这确实是https://github.com/CommunityToolkit/MVVM-Samples/issues/41上的情况:

“Sergio0694 于 2021 年 3 月 28 日发表评论”:“没错,默认情况下 RelayCommand 不会自动更新其在 WPF 上的视觉状态......”。

他推荐的解决方案是使用:https ://gist.github.com/Sergio0694/130bc344e552e501563546454bd4e62a和

我的 DoSomething 方法如下所示:

它将给出所需的视觉效果,但仅在线:只有PropertyCheckedByCanDoSomething = false;PropertyCheckedByCanDoSomething = true;单击应用程序或进行窗口切换后才能看到效果。
我怎样才能解决这个问题?
非常感谢任何支持。

0 投票
2 回答
54 浏览

c# - WPF 将 DataContext 设置为没有默认构造函数的 ViewModel

我有一个ViewModel接受几个构造函数参数的。据我了解,因此设置 View 的 DataContext 的唯一方法是使用后面的代码。

这有它的缺点:

  • Visual Studio 不会显示ViewModel正在构建的视图的智能
  • 无法ViewModel在 XAML 设计器中查看我的构造函数中定义的设计时数据,因为设计器只是中断了

我有哪些选择?

我想要一个ViewModel可以接受构造函数参数,有设计时数据,并且我的 Visual Studio 智能为我提供关于我的成员的建议,ViewModel这样我就可以获得良好的设计体验。

PS。我正在使用Microsoft 的MVVM Toolkit / Windows Community Toolkit,但我会很感激任何关于如何实现我的最终目标的答案。谢谢你。