处理WPF按钮单击并启用禁用

时间:2013-04-17 18:36:48

标签: wpf mvvm

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

  1. 最初在表单加载时,搜索按钮将全部禁用 给出搜索条件,将启用搜索按钮 自动。
  2. 点击搜索按钮,我想调用该方法 使用MVVM模式并将结果绑定到网格
  3. XAML:

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

    模型,视图模型和XAML需要什么代码?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

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