WPF-Prism CanExecute 方法未被调用

2024-02-11

我正在编写一个简单的登录用户控件,其中包含两个文本框(用户名和密码)和一个登录按钮。我希望仅在填写用户名和密码字段时启用登录按钮。我正在使用 Prism 和 MVVM。 LoginViewModel 包含一个名为 LoginCommand 的属性,该属性绑定到登录按钮。我的 ViewModel 中有一个 CanLoginExecute() 方法,但它仅在应用程序启动时触发,然后再也不会触发。因此登录按钮永远不会启用。我缺少什么?

这是我的 xaml:

<TextBox x:Name="username"
    Text="{Binding Path=Username, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
<TextBox x:Name="password"
    Text="{Binding Path=Password, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
<Button Content="Login"
    cmnd:Click.Command="{Binding LoginCommand}" />

这是我的视图模型

class LoginViewModel : IDataErrorInfo, INotifyPropertyChanged
{
    public LoginViewModel()
    {
        this.LoginCommand =
            new DelegateCommand<object>(
                this.LoginExecute, this.CanLoginExecute);
    }

    private Boolean CanLoginExecute(object dummyObject)
    {
        return (string.IsNullOrEmpty(Username) ||
                string.IsNullOrEmpty(Password)) ? false : true;
    }

    private void LoginExecute(object dummyObject)
    {
        if (CheckCredentials(Username, Password))
        {
            ....
        }
    }

    #region IDataErrorInfo Members

    public string Error
    {
        get { throw new NotImplementedException(); }
    }

    public string this[string columnName]
    {
        get
        {
            string result = null;
            if (columnName == "Username")
            {
                if (string.IsNullOrEmpty(Username))
                    result = "Please enter a username";
            }
            else if (columnName == "Password")
            {
                if (string.IsNullOrEmpty(Password))
                    result = "Please enter a password";
            }
            return result;
        }
    }

    #endregion // IDataErrorInfo Members

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    #endregion // INotifyPropertyChanged Members

    #region Properties

    private String _username;
    public String Username
    {
        get { return _username; }
        set
        {
            if (value == _username)
                return;
            _username = value;
            this.OnPropertyChanged("Username");
        }
    }

    private String _password;
    public String Password
    {
        get { return _password; }
        set
        {
            if (value == _password)
                return;
            _password = value;
            this.OnPropertyChanged("Password");
        }
    }

    public ICommand LoginCommand { get; private set; }

    #endregion // Properties
}

绑定控件很可能从不要求可执行再次声明。您需要致电引发可执行更改每当您检测到更改命令的条件时,DelegateCommand 上的方法可执行状态。这向绑定控件发出信号以更新可执行 state.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF-Prism CanExecute 方法未被调用 的相关文章

  • 选择组合框文本

    我有一个组合框声明如下
  • 能否为一种 XAML 样式定义多个 TargetType?

    在 HTML CSS 中 您可以定义可应用于多种类型元素的样式 例如 highlight color red 可以应用于 P 和 DIV 例如 p class highlight this will be highlighted p div
  • mifare 卡身份验证错误“6982:安全状态未满足”

    我有 pc sc 读卡器和非接触式卡 mifare 卡 我可以连接到该卡 并且我也成功执行 getdate 命令 但是当我想进行身份验证时 我看到此错误 6982 安全状态不满足 我已经尝试过这 3 个不同的身份验证命令 但所有这些命令都出
  • WPF - 从 WPF 应用程序切换到 xbap

    我有一个可用的 WPF 应用程序 我希望看到它作为 xbap 运行 我需要在 WPF 应用程序中更改哪些内容才能使其作为 xbap 运行 当谈到可以以图形方式执行的操作时 两者之间的唯一区别是 XBAP 无法使用 BitmapEffects
  • 如何在WPF中使用Application.Exit事件?

    我需要删除一些特定文件 然后用户关闭 WPF 中的程序 所以我从这里尝试了 MDSN 代码http msdn microsoft com en us library system windows application exit aspx
  • 如何将 textblock.foreground 绑定到变量? (WPF C#)

    所以我希望改变我的程序 以便我可以运行一个函数来检查前景色是否应该是黑色或银色 我希望将不可 访问 的字段灰显 My form currently looks like 我希望将 无需维护 字段 灰显 但我在尝试在数据模板中定义字体前景的绑
  • 在 WPF 中展开 TreeView 时显示“请稍候...”消息

    我的 TreeView 中有很多项目 而且项目也非常复杂 我不想使用虚拟化 展开 TreeView 有时需要花费大量时间 因此 是否有任何事件 例如 IsTreeViewExpanding 或类似的事件 我可以在其中显示 正在生成 Tree
  • 按名称查找控件的父级

    当在 xaml 代码中设置名称时 有没有办法通过名称找到 WPF 控件的父级 尝试这个 element VisualTreeHelper GetParent element as UIElement 在哪里 元素是 Children 您需要
  • 无法覆盖由 TargetType 在单个特定控件上设置的全局 WPF 样式

    我有一个应用于所有文本框的样式 在资源字典中定义
  • 在 StackPanel 中拉伸文本框

    这是我当前用来执行此操作的 XAML 并且我一生都无法弄清楚如何扩展文本框以填充整个列 有人可以指导我正确的方向吗 先感谢您
  • 在运行时拖动窗体上的控件

    我刚刚开始使用 WPF 但我正在尝试添加我的代码 来自 Winforms 使用户能够在运行时将任何控件拖动到他们想要的任何位置 但我似乎无法获取鼠标当前的位置 呃 没有鼠标位置 在 Mouse 事件中 您可以使用 e GetPosition
  • 将 WPF 单选按钮设置为具有正确 IsEnabled 行为的切换按钮

    我需要将一些分组单选按钮设置为切换按钮 为此 我将以下样式应用于单选按钮 Style StaticResource x Type ToggleButton 这给了我想要的风格 但我注意到一个恼人的副作用 我需要能够在禁用控件时更改所选按钮
  • 椭圆绘制WPF动画

    我正在开发一个矩形区域的控件 当触发发生时 将在矩形区域中绘制一个椭圆形 该控件将能够承载其他控件 例如文本框 按钮等 因此在触发时将在它们周围绘制圆圈 我希望将圆圈绘制为动画 就像您用笔圈出内部控件一样 实现这一目标的最佳方法是什么 我一
  • 在 Checkbox.Checked 或 Unchecked 上执行命令

    我的窗口上有一个复选框控件 我想执行一个命令来调用关联视图模型中的方法 我还需要复选框的值 我似乎找不到将命令与复选框关联起来的方法 有人这样做过吗
  • 当 Bool 变量变为 True 时更改标签

    我不太确定如何解释这一点 我将把代码放在伪代码中以便于阅读 我几乎想要一个标签在类的 bool 变量更改时更改其文本 我不确定我需要使用什么 因为我使用的是 WPF 并且该类不能只更改我不更改的标签你不觉得吗 我需要举办某种活动吗 或者 W
  • 限制文本框中每行的最大字符数

    假设我有以下内容
  • DependencyProperty 值未通过数据绑定设置

    我有一堂课有一个DependencyProperty member public class SomeClass FrameworkElement public static readonly DependencyProperty Some
  • WPF 与分辨率无关

    如果我将所有内容放入 viewbox 容器中 那么我的 wpf 应用程序将与分辨率无关 或者我需要执行其他操作吗 请帮助概念 根据可用屏幕或中等尺寸缩放 元素如果您希望始终填充屏幕或输出设备的某些空间 而与指标无关 那么使用视图框是一个不错
  • 更改列表视图中的确切滚动位置

    一直在网上寻找答案 但我还没有找到任何可以做到这一点的东西 我想以编程方式更改 WPF 列表视图中的确切位置 某种说法 ListView Scrollposition Y some value 我唯一能找到的就是将值更改为列表视图中的对象
  • 创建新视图时如何初始化视图模型中的属性?

    我有一个应用程序 可以打开一个视图 允许您搜索数据 然而 为了进行搜索 用户必须选择他想要在什么类别下进行搜索 目前 我正在尝试弄清楚如何将所选类别从主视图模型 作为 int 传递到新搜索视图的视图模型 目前我正在尝试在主视图中使用类似的东

随机推荐

  • Mac 上使用 zsh 绑定密钥

    我一直在尝试在 Mac 上绑定 zzh 中的按键 但遇到了一些问题 我知道我应该用谷歌搜索这个 但找不到我需要的东西 我一直在尝试将 ctrl backspace 绑定为与 ctrl w 等效 即删除一个单词 但我找不到它的关键代码 当我用
  • 有 Json 标签但未导出[重复]

    这个问题在这里已经有答案了 开始学习golang 任务 获取 Json 并解组它 但我得到了错误 Json tag but not exported 如何让未导出的字段变成导出的 然后用方法实现呢 这是代码 package main imp
  • 通过mvc转发器发布值

    Form using IEnumerable
  • 如何让 Cocoa NSTextView 随着用户输入而增长?

    对于我正在编写的 Cocoa 应用程序 我希望在主文档内容的右侧支持一个面板 用户可以在其中为当前选定的文档内容添加注释 如果您熟悉 Microsoft Word 或 Scrivener 此功能类似于这些应用程序中的注释功能 Scriven
  • ImportError:导入 pyexpat 时 DLL 加载失败:找不到指定的模块

    我使用的是 WINDOWS 7 32 位 这是我在创建新项目时遇到的问题的屏幕截图 在网上找不到任何解决方案 急需帮助 已解决的问题 ImportError DLL load failed The specified module coul
  • IE8 html 选择需要点击两次才能打开下拉菜单

    这是我的代码
  • 旋转时的CSS挑战(变换:旋转)块 - 宽度自动

    我在使用 css 变换将块旋转 90 度时遇到了一个小问题 挑战在于 旋转块位于 40px 垂直列内 这意味着自动模式下旋转块的宽度不超过40px 因此 文本块不会放置在连续的一行上 而是出现换行符 为了更好地形象化这个问题 请检查我创建的
  • 如何在 ffmpeg 命令中缩放并添加正确的徽标?

    我正在尝试应用水印 并通过 ffmpeg 命令将其缩放到当前视频大小 这是我最初的无水印命令 ffmpeg v 0 vcodec h264 qsv i udp some ip 1234 fifo size 1000000 overrun n
  • 使用 jQuery 更改 HTML 标签?

    这可能吗 example a change click function code to change p tag to h5 tag p Hello p a change a 因此 单击更改锚点应该会导致 p Hello p 部分更改为
  • Bash 脚本错误地计算了自身的实例

    我创建了一个bash计算自身已启动实例的脚本 就是这样 在这个例子中 我显示的是实例 而不是用wc l bin bash nb ps aux grep count itself sh echo nb sleep 20 当然 我的脚本名为co
  • 在标准 NSWindow 上创建自定义标题栏

    我一直在尝试为我的菜单栏应用程序构建特定的外观 我一直在使用NSWindow with a NSBorderlessWindowMask样式蒙版和设置 window setOpaque NO and window setBackground
  • 适用于 boto3 的 PyCharm 智能感知

    在 PyCharm 中查看完整的智能感知 代码完成 选项时遇到问题 在 Windows 上使用 python 3 4 这些建议部分有效 import boto3 s boto3 Session boto3 will bring up lis
  • Cabal 无法确定 GHC 版本

    我目前正在尝试通过执行以下操作来更新 Cabal 1 14 0 cabal install 版本 0 14 0 cabal install cabal install 但是 这给了我一个 ExitFailure1 错误 setup The
  • 为什么在 Linux 中使用 kmalloc 和 GFP_DMA 时会得到高地址?

    我正在 Linux 中为 DMA 设备编写设备驱动程序 在Linux 设备驱动程序 第 15 章 http lwn net images pdf LDD3 ch15 pdf 它说 对于有这种限制的设备 应该分配内存 通过将 GFP DMA
  • 如何在沙盒 iframe (IE11) 中使用 javascript 创建 iframe 内容?

    我正在尝试通过创建 iframe 并使用 javascript 或 vbscript 动态构建 iframe 内容来构建在 Internet Explorer 中使用的测试页面 我通常会使用 data URI 但 IE 会阻止它 例子 看来
  • 迭代自定义元素中的 HTMLCollection

    如何在另一个自定义元素的 Shadow dom 中迭代一个自定义元素的实例 HTMLCollections 似乎没有按预期运行 我是一个 jQuerian 而且是普通 js 的新手 所以我确信我在某个地方犯了一个明显的错误 HTML
  • 有 CSS 媒体查询来检测 Windows 吗?

    我想指定两种略有不同的背景颜色 一种用于 Mac OS 一种用于 Windows 没有属性来指定用于查看网页的操作系统 但您可以使用 javascript 检测它 这里是检测操作系统的一些示例 var OSName Unknown OS i
  • Heroku 和 Zerigo 设置问题

    EDIT2 等待查看我的更改是否成功 编辑 我使用命令行 Zerigo install 命令重新安装了所有内容 最初的问题是手动设置 现在的问题是 我设置的自定义域无法正常工作 访问自定义域只会在 Chrome 中返回错误 哎呀 Googl
  • 用于构建成就系统的 Ruby/Rails 现代化工具

    我有兴趣为我的 Ruby on Rails 应用程序构建一个强大的成就系统 成就可以通过多种方式实现 通常 我们会有一些可能发生在多个模型上的标准 一些是必需的 一些是触发成就的可选 混合和匹配 我想说这类似于此处或 Foursquare
  • WPF-Prism CanExecute 方法未被调用

    我正在编写一个简单的登录用户控件 其中包含两个文本框 用户名和密码 和一个登录按钮 我希望仅在填写用户名和密码字段时启用登录按钮 我正在使用 Prism 和 MVVM LoginViewModel 包含一个名为 LoginCommand 的