簡體   English   中英

MVVM WPF OnButtonClick中的數據綁定

[英]Data binding in MVVM WPF OnButtonClick

我在WPF應用程序中使用MVVM,但數據綁定出現問題。 我正在考慮將用戶操作綁定到數據操作(在我的情況下,將記錄添加到數據庫)。 如果我在CommandClass和ViewModelClass之間使用重耦合,則一切正常。 在這種情況下,我的CommandClass如下所示:

public class ButtonCommand : ICommand
{
    private readonly UserViewModel _userViewModel;

    public ButtonCommand(UserViewModel viewModel)
    {
        _userViewModel = viewModel;
    }

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public void Execute(object parameter)
    {
        _userViewModel.AddUser();
    }

    public event EventHandler CanExecuteChanged;
}

我在ViewModelClass中的沉重耦合看起來像這樣:

    private readonly ButtonCommand _buttonCommand;

    public UserViewModel()
    {
        _buttonCommand = new ButtonCommand(this);
    }

    public ICommand btnClick
    {
        get { return _buttonCommand; }
    }

單擊按鈕時的XAML耦合(請查看“命令”部分):

 <Page.Resources>
    <viewModel:UserViewModel x:Key="UserObj" TxtFirstName="" TxtLastName="" TxtEmail="" TxtPassword=""/>
 </Page.Resources>
 ....
 <Button Content="Submit" HorizontalAlignment="Left" Margin="42,231,0,0" VerticalAlignment="Top" Width="75" Command="{Binding btnClick, Mode=OneWay, Source={StaticResource UserObj}}"/>

我有這樣的輸出(看一下Submit按鈕): Window

在對CommandClass和ViewModelClass進行更改(以使其更加通用和可重用)之后,但在運行應用程序后,將XAML耦合保持不變,則Submit按鈕變得不可用。 更改后,CommandClass如下所示:

public class ButtonCommand : ICommand
{
    private readonly Action _executionMethod;
    private readonly Func<bool> _executeOrNot; 

    public ButtonCommand(Action executionMethod, Func<bool> executeOrNot)
    {
        _executionMethod = executionMethod;
        _executeOrNot = executeOrNot;
    }

    public bool CanExecute(object parameter)
    {
        return _executeOrNot();
    }

    public void Execute(object parameter)
    {
        _executionMethod();
    }

    public event EventHandler CanExecuteChanged;
}

更改后我的ViewModelClass:

private readonly ButtonCommand _buttonCommand;

public UserViewModel()
{
    _buttonCommand = new ButtonCommand(AddUser, IsValidInputForRegistration);

}
public ICommand btnClick
{
    get { return _buttonCommand; }
}

XAML我保持不變。 接下來是我的輸出(看一下Submit按鈕): WindowWithChanges

誰能為我提供一些信息,為什么按鈕不可用以及我在哪里弄糟?

首先,嘗試IsValidInputForRegistration始終return true 這將證明你的執行IButton (即你的ButtonCommand類)工作正常。

如果這樣IsValidInputForRegistration ,則您的程序正在發生的事情是_buttonCommandinitialization期間傳遞了IsValidInputForRegistrationstate ,由於它不query IsValidInputForRegistration是否已更改狀態,因此它將保持在該狀態。

為了實現狀態查詢,您可以像這樣實現EventHandler CanExecuteChanged

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }

您可以查看msdnCommandManager.RequerySuggested作用。 但是我認為描述說明了一切。 :)

當CommandManager檢測到可能改變命令執行能力的條件時發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM