0

我有一个带有一些控件的 UI。

  1. 最初加载表单时,搜索按钮将被禁用,一旦给出所有搜索条件,搜索按钮将自动启用。
  2. 单击搜索按钮时,我想使用 MVVM 模式调用该方法并将结果绑定到网格中

XAML:

<Button Name="btnGetDetails" Content="Get Details" Grid.Row="2" Command="{Binding SearchCommand}"/>

模型、视图模型和 XAML 中需要哪些代码?

4

2 回答 2

0

所以这里有一些 MVVM 基础知识。你在正确的轨道上,只是错过了一步。您的视图模型中的 Command 实现应该(可能)接受两个输入:一个表示执行代码的 Action,以及一个返回 true/false 的谓词,判断您是否可以执行 Action 块中的代码。因此,在您的视图模型中,按照以下方式定义您的命令(注意:这是我的一个项目的示例):

this.executeCommand = new RelayCommand(this.OnExecuteClicked, this.OnCanExecuteChanged);

OnCanExecuteChanged 方法将根据您设置的任何条件返回一个布尔值。因此,如果您希望在正确设置属性 A 和属性 B 时启用提交按钮,则返回 true,否则返回 false。您的命令实现的内部工作将负责其余的工作。搜索 RelayCommand 实现(如果您还没有)或 DelegateCommand 以获取更多示例。

于 2013-04-17T20:11:21.330 回答
0

只有在单击按钮时才会执行命令。如果您需要对按钮执行某些操作,那么您应该对包含该按钮的窗口执行此操作(假设您的按钮位于窗口中)。现在,如果您想坚持使用 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 视频信息量很大:

http://www.youtube.com/watch?v=EpGvqVtSYjs

于 2013-04-17T19:48:24.113 回答