我想實現一個WPF MVVM應用程序。我是這個平臺的初學者。所有我需要的是落實我SaveCommandWPF MVVM CanExecute方法實現問題
這裏一個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#視圖模型代碼
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;
}
沒有可以CanSaveExcute它的工作原理精細。設置完CanSaveExcute後,該按鈕保持禁用狀態,並且不會對文本更改啓用。據我所知,這是一條路。
請告訴我我做錯了什麼。
感謝
不確定DelegateCommand是如何實現的,但通常情況下,如果您在此情況下讓Command接受參數(對象),則在xaml中應該還有一個CommandParameter。沒有,因此可能無法調用CanSaveExcute(object obj),因爲綁定機制不知道要傳遞什麼參數。你嘗試使用不帶參數的命令嗎? – stijn
問題是UpdateSourceTrigger = PropertyChanged不改變PropertyChange上的屬性。它應該改變名字字段和姓氏字段,因爲我在文本框上鍵入,但那不會發生。 – thewayman