WPF MVVMアプリケーションを実装しようとしています。私はこのプラットフォームの初心者です。私は必要なのは私のSaveCommandここWPF MVVM CanExecuteメソッド実装の問題
ためCanExecuteメソッドを実装することであることは、それが動作CanSaveExcuteことができなければ、コード
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#のViewModelコード
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を設定すると、ボタンは無効のままになり、テキストの変更が有効になりません。私が学んだ限り、これは行く方法です。
私が間違っていることを教えてください。
おかげ
DelegateCommandがどのように実装されているのかわからないのですが、通常は、この場合引数(オブジェクト)を受け入れるようにすると、xamlにもCommandParameterが必要です。何もないので、おそらくCanSaveExcute(オブジェクトobj)は、バインディングのメカニズムがないので呼び出すことができません;引数として渡すものを知っていません。あなたはパラメータなしのコマンドで試してみませんか? – stijn
問題はUpdateSourceTrigger = PropertyChangedはPropertyChangeのプロパティを変更していません。私はテキストボックスに入力するようにファーストネームフィールドとラストネームフィールドを変更する必要がありますが、それは起こっていません。 – thewayman