- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 MVVM 模式。我是我的观点,我有个人详细信息的文本框,其中之一是 idBox。此外,该 View 由几个按钮组成,其中之一是 editModeBtn。
我希望只有在 idBox 中有一个有效的 int 时才启用 editModeBtn。
我的 editBtn 的 Xaml(在 View 内)如下所示:
<Button x:Name="editModeBtn" Content="Edit" Command="{Binding ChangeToEditScreenCommand}" CommandParameter="{Binding ElementName=idBox, Path=Text}"></Button>
private RelayCommand<string> _changeToEditScreenCommand;
public RelayCommand<string> ChangeToEditScreenCommand
{
get
{
if (_changeToEditScreenCommand == null)
{
_changeToEditScreenCommand = new RelayCommand<string>((param) => ChangeToEditScreen(), (param) => CanEdit(param));
}
return _changeToEditScreenCommand;
}
}
private bool CanEdit(string currentInsertedId)
{
int idValue;
bool result = Int32.TryParse(currentInsertedId, out idValue);
if (result)
{
if (idValue > 0) { return true; };
return false;
}
return false;
}
最佳答案
你为什么要走通过 CommandParameter
的路线? ?你不能只绑定(bind)你的TextBox.Text
吗?属性为 UpdateSourceTrigger=PropertyChanged
的 VM .这应该会在 TextBox 中的文本更改后立即更新 VM 中 Text 的绑定(bind)属性,而不是 TextBox 失去焦点时的默认值。
在您的情况下,这是您似乎想要的行为。因此,您只需要一个 RelayCommand
为您的命令而不是 RelayCommand<T>
带参数。
所以说简单的 xaml 显示上述方法:
<TextBox Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}" />
<Button Command="{Binding ButtonCommand}"
Content="My Button" />
public string Title {
get {
return _title;
}
set {
if (_title == value) {
return;
}
_title = value;
RaisePropertyChanged(() => Title);
}
}
public RelayCommand ButtonCommand { get; private set; }
private bool CanEdit(string title) {
int idValue;
bool result = Int32.TryParse(title, out idValue);
if (!result) {
return false;
}
return idValue > 0;
}
ctor() {
ButtonCommand = new RelayCommand(() => Debug.WriteLine("Called"), () => CanEdit(Title));
}
RaiseCanExecuteChanged()
, 在本例中,
Title
的属性 setter 有点类似于关联 TextBox 的 textChanged 事件处理程序(我说这只是因为现在每次文本框中的文本更改时都会调用 setter)
CanExecute()
文本变化时调用,可以调用
ButtonCommand.RaiseCanExecuteChanged()
来自
Title
引发它的 PropertyChanged 事件的属性 setter 。
关于c# - MVVM Light - RaiseCanExecuteChanged 用于 RelayCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24221924/
下面是一个很简单的Prism.Wpf以 DelegateCommand 为例两者都有Execute和 CanExecute代表。 假设 CanExecute取决于某些属性。看来 Prism 的Dele
我正在使用几个绑定(bind)到 RelayCommands 的 Buttons,这些 RelayCommands 是用 CanExecute 委托(delegate)初始化的。 RelayComma
我正在使用 PRISM 的 WPF 和 DelegateCommand 并遇到以下问题: 我开始一个异步操作,例如: public async void ProgramDevice() { v
当我在 TimerOnElapsed 方法中调用 PressCommand.RaiseCanExecuteChanged(); 时,没有任何反应。 可能是什么问题?(GalaSoft.MvvmLigh
我正在使用 Nuget (4.1.23.0) 上可用的当前版本的 MvvmLight,调用 RaiseCanExecuteChanged 似乎在单元测试中没有做任何事情。场景很简单,我有一个命令: p
更新 上传的示例项目:https://github.com/subt13/BugSamples 我重现了一个在使用 MVVMLight 框架的 Windows 10 UAP 应用程序中发生的错误。 当
我正在使用 MVVM 模式。我是我的观点,我有个人详细信息的文本框,其中之一是 idBox。此外,该 View 由几个按钮组成,其中之一是 editModeBtn。 我希望只有在 idBox 中有一个
我绝对有没有知道是什么原因造成的。 背景:使用 Prism 框架 I have a button bound to a DelegateCommand I call RaiseCanExecuteCh
我正在尝试确定使ICommands的CanExecute()反映在UI中的最佳方法。 我知道Dispatcher是处理UI绘图的WPF(引擎?),默认情况下,Dispatcher会在实例化以及活动用户
在我的 WPF 应用程序中,我有一种节点图。我已经向这些节点添加了一个 ContextMenu,当我右键单击内容等时会出现。 上下文菜单中的命令来自具有 DelegateCommands 的服务 (M
我的 ViewModel 中有这样的东西: public enum WorkState { Idle, Working, Stopping }; public class MainViewMo
我刚刚从 Prism 4.1 更新到 5,以前工作正常的代码现在抛出 InvalidOperationExceptions。我怀疑根本原因是更新的异步 DelegateCommand 没有正确编码到
我有一个文本框和一个绑定(bind)到我的 View 模型中的属性的按钮,如下所示 我的用户名属性: private string userName; public string
我正在使用 Prism 和 MVVM 开发 WPF 应用程序。 应用程序的要求之一是能够以不同的用户身份(具有不同的权限)登录。 现在大多数权限都是简单的允许或禁止显示特定 View 。所有这些都实现
我是一名优秀的程序员,十分优秀!