gpt4 book ai didi

c# - WPF MVVM CanExecute方法实现问题

转载 作者:行者123 更新时间:2023-11-30 21:13:49 24 4
gpt4 key购买 nike

我正在尝试实现 WPF MVVM 应用程序。我是这个平台的初学者。我只需要为我的 SaveCommand 实现一个 CanExecute 方法

这是代码

WPF XML 代码

        <Canvas Height="283" Name="canvas1" Width="321">
<Label Canvas.Left="6" Canvas.Top="6" Content="First Name" Height="25" Width="91" />
<Label Canvas.Left="6" Canvas.Top="37" Content="Last Name" Height="25" Width="91" />
<TextBox Canvas.Left="103" Canvas.Top="10" Height="21" Width="199" Text="{Binding Path=FirstName, UpdateSourceTrigger=PropertyChanged}"/>
<TextBox Canvas.Left="103" Canvas.Top="37" Height="21" Width="199" Text="{Binding Path=LastName, UpdateSourceTrigger=PropertyChanged}"/>
<Button Canvas.Left="228" Canvas.Top="241" Content="Save" Height="23" Width="74" Command="{Binding SaveCommand}" />
<TextBlock Canvas.Left="28" Canvas.Top="110" Height="19" Width="259" Text="{Binding Path=FullName}"/>
</Canvas>

C# View 模型代码

    public CustomerViewModel(IEventAggregator eventAggregator, IUnityContainer container, ILoggerFacade logger)
: base(eventAggregator, container, logger)
{
logger.Log("View Model Initialized", Category.Debug, Priority.None);
InitializeCommands();
}

public DelegateCommand<object> SaveCommand { get; set; }

private string firstName;

public string FirstName
{
get { return firstName; }
set {
firstName = value;
RaisePropertyChanged("FirstName");
}
}

private string lastName;

public string LastName
{
get { return lastName; }
set {
lastName = value;
RaisePropertyChanged("LastName");
}
}
private string fullName;

public string FullName
{
get { return fullName; }
set {
fullName = value;
RaisePropertyChanged("FullName");
}
}


private void InitializeCommands()
{
SaveCommand = new DelegateCommand<object>(OnSaveCommand, CanSaveExcute);

}
private bool CanSaveExcute(object obj)
{
if (string.IsNullOrEmpty(firstName) || string.IsNullOrEmpty(lastName))
return false;
return true;
}

private void OnSaveCommand(object obj)
{
FullName = FirstName + " " + LastName;
}

没有 jar 头 CanSaveExcute 它工作正常。设置 CanSaveExcute 后,该按钮保持禁用状态,并且不会在文本更改时启用。据我所知,这是要走的路。

请告诉我我做错了什么。

谢谢

最佳答案

您还应该引发“CanExecuteChanged”事件,否则接收方将不得不永久地重新访问您的命令,以确定它是否可以执行。您可以使用“RaiseCanExecuteChanged”方法,描述 here

编辑如果您不介意开销,您可以在属性 setter 中调用 RaisePropertyChanged("FullName"); 之后调用 this.SaveCommand.RaiseCanExecuteChanged() .如果您的 RaisePropertyChanged 方法是虚拟的,您可以将 RaiseCanExecuteChanged() 放在它们的位置。

关于c# - WPF MVVM CanExecute方法实现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6623959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com