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

处理WPF按钮单击并启用禁用,wpf,mvvm,Wpf,Mvvm,我有一个带有几个控件的UI 最初,当表单加载时,搜索按钮将被禁用 给定搜索条件后,将启用搜索按钮 自动地 单击search按钮,我想调用该方法 使用MVVM模式并将结果绑定到网格中 XAML: 模型、视图模型和XAML中需要哪些代码?只有在单击按钮时才会执行该命令。如果您需要对按钮执行某些操作,那么您应该对包含按钮的窗口执行操作(假设您的按钮位于窗口中)。现在,如果您想坚持使用MVVM模式,那么就不应该使用Window.OnLoaded,因为这样会使代码落后。一个选项是使用System.Wi

我有一个带有几个控件的UI

  • 最初,当表单加载时,搜索按钮将被禁用 给定搜索条件后,将启用搜索按钮 自动地
  • 单击search按钮,我想调用该方法 使用MVVM模式并将结果绑定到网格中
  • XAML:

    
    

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

    只有在单击按钮时才会执行该命令。如果您需要对按钮执行某些操作,那么您应该对包含按钮的窗口执行操作(假设您的按钮位于窗口中)。现在,如果您想坚持使用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>
    
    
    
    至于您的模型、视图和视图模型应该是什么,我认为您应该在web上查看一些教程。关于如何实现MVVM模式,有一些非常好的解释。我发现这段youtube视频内容丰富:


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


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

    您遇到了什么问题?@老实说,问题是我不知道如何做到这一点,只知道XAML的外观,但不知道它将如何在模型和视图模型中实现。搜索了一些文章,但没有得到好的链接。。。。提前感谢。您在model、view model和XAML中尝试了哪些代码?发布您所做的。@Bigdady,正如我在查询中提到的,我不知道模型、视图模型中会有什么代码,甚至一个示例都可以。。。我会想出办法的。。你能帮忙吗?类模型{公共字符串A{get;set;}公共字符串B{get;set;}}}类视图模型{}@Amit。StackOverflow不是教程。
    <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>
    
    this.executeCommand = new RelayCommand(this.OnExecuteClicked, this.OnCanExecuteChanged);