我有一个带有一些控件的 UI。
- 最初加载表单时,搜索按钮将被禁用,一旦给出所有搜索条件,搜索按钮将自动启用。
- 单击搜索按钮时,我想使用 MVVM 模式调用该方法并将结果绑定到网格中
XAML:
<Button Name="btnGetDetails" Content="Get Details" Grid.Row="2" Command="{Binding SearchCommand}"/>
模型、视图模型和 XAML 中需要哪些代码?
所以这里有一些 MVVM 基础知识。你在正确的轨道上,只是错过了一步。您的视图模型中的 Command 实现应该(可能)接受两个输入:一个表示执行代码的 Action,以及一个返回 true/false 的谓词,判断您是否可以执行 Action 块中的代码。因此,在您的视图模型中,按照以下方式定义您的命令(注意:这是我的一个项目的示例):
this.executeCommand = new RelayCommand(this.OnExecuteClicked, this.OnCanExecuteChanged);
OnCanExecuteChanged 方法将根据您设置的任何条件返回一个布尔值。因此,如果您希望在正确设置属性 A 和属性 B 时启用提交按钮,则返回 true,否则返回 false。您的命令实现的内部工作将负责其余的工作。搜索 RelayCommand 实现(如果您还没有)或 DelegateCommand 以获取更多示例。
只有在单击按钮时才会执行命令。如果您需要对按钮执行某些操作,那么您应该对包含该按钮的窗口执行此操作(假设您的按钮位于窗口中)。现在,如果您想坚持使用 MVVM 模式,那么您不应该使用 Window.OnLoaded,因为这会将代码放在您的代码后面。一种选择是使用您已单独下载的 System.Windows.Interactivity。这是它的样子:
<Window x:Class="..."
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="clr
-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding ...}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Window>
至于你的 Model、View 和 ViewModel 应该是什么,我觉得你应该看看网上的一些教程。关于如何实现 MVVM 模式有一些很好的解释。我自己发现这个 youtube 视频信息量很大: