繁体   English   中英

WPF将ICommand与ViewModel绑定

[英]WPF Binding ICommand with ViewModel

ICommand:

public class CMDAddEditUser : ICommand
{
    public event EventHandler CanExecuteChanged;
    public VMAddEditUser ViewModel { get; set;}

    public CMDAddEditUser()
    {
    }

    public CMDAddEditUser(VMAddEditUser vm)
    {
        ViewModel = vm;
    }

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


    public void Execute(object parameter)
    {
        this.ViewModel.SimpleMethod();
    }
}

ViewModel:

public class VMAddEditUser
{
    private Employee _employee = new Employee();
    private CMDAddEditUser Command { get; set; }

    public VMAddEditUser()
    {
        Command = new CMDAddEditUser(this);
    }

    public string txtFirstName
    {
        get { return _employee.FirstName; }
        set { _employee.FirstName = value; }
    }

    public void SimpleMethod()
    {
        txtFirstName = "abc";
    }
}

XAML:

<Window x:Class="WPF.AddEditUserView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="clr-namespace:ViewModel;assembly=ViewModel"
        Title="AddEditUserView" Height="392.329" Width="534.143">
    <Grid Margin="0,0,2,-3">
        <Grid.Resources>
            <vm:VMAddEditUser x:Key="abx"/>
        </Grid.Resources>
        <Grid.DataContext>
            <vm:VMAddEditUser/>
        </Grid.DataContext>
        <Button x:Name="btn" Content="Cancel" Command="{Binding SimpleMethod, Source={StaticResource abx}}"/>

    </Grid>
</Window>

xaml位于不同项目中,而CMDAddEditUser和VMAddEditUser位于同一项目中。

ICommand的.Execute(Object Parameter)似乎不起作用。 我无法将SimpleMethod与具有的按钮绑定。 当我在xaml文件中键入命令绑定时,自动完成/建议仅显示txtFirstName而不显示SimpleMethod 我无法弄清楚为什么不能绑定和找不到SimpleMethod。 我在此代码中做错了什么?

首先:您希望视图能够绑定到的所有属性必须是公共的。 由于视图绑定到作为ICommand实现实例的属性,因此属性必须是公共的,因此视图可以访问它。 但是,如果您不想将其暴露给外界,则您的SimpleMethod()可以是私有的,这就是为什么要使用命令调用它而不是让视图直接调用它的原因。 第二:将网格DataContext设置为“ VMEditUser”类,因此在绑定时无需指定Source ,而DataContext为source。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM