【问题标题】:Binding a save command WPF绑定保存命令 WPF
【发布时间】:2011-03-25 03:34:13
【问题描述】:

我在一个网格中有一个带有 3 个文本框的窗口 - 这是我的视图 - 我有保存按钮,用于将一个新用户添加到我的用户列表中,其中包含来自文本框的数据。 我想在我的视图模型类上使用中继命令来执行此操作,但我对如何进行绑定感到很困惑。我希望它足够清楚。任何想法或示例都会有所帮助。 提前致谢。

【问题讨论】:

    标签: wpf mvvm command


    【解决方案1】:

    你应该有一个类似于下面的 ViewModel:

    class UserViewModel
    {
        public String Name { get; set; }
        public String Password { get; set; }
        public String Email { get; set; }
    
        public RelayCommand AddUserCommand { get; set; }
    
        public UserViewModel()
        {
            AddUserCommand = new RelayCommand(AddUser);
        }
    
        void AddUser(object parameter)
        { 
            // Code to add user here.
        }
    }
    

    你可以像下面这样使用它:

        <StackPanel>
            <TextBox Text="{Binding Name}"></TextBox>
            <TextBox Text="{Binding Password}"></TextBox>
            <TextBox Text="{Binding Email}"></TextBox>
            <Button Command="{Binding AddUserCommand}">Add</Button>
        </StackPanel>
    

    要完成这项工作,请将以下代码放入您的 UserControl/Control/Window 的构造函数中:

    DataContext = new UserViewModel();
    

    【讨论】:

    • 这些代码是否足以提供视图和视图模型之间的关系?还是不行……
    • 您必须创建 ViewModel 的对象并将其分配给窗口的 DataContext
    • 是的,分配数据上下文是缺少我的代码。谢谢=)
    【解决方案2】:

    我假设您阅读了 Josh Smith 的文章:WPF Apps With The Model-View-ViewModel Design Pattern。如果没有,请先阅读,然后下载代码,因为示例与您的问题非常相似。

    【讨论】:

    • 我了解你:)。到过那里。在第三次阅读和研究代码后,我得到了其中的一部分。需要时间来捕捉正在发生的事情。至少我需要。
    【解决方案3】:

    您是否创建了 ViewModel 的实例并将该实例放入视图或堆栈面板的 DataContext 中?

    示例:

    用户视图模型视图模型 = 新用户视图模型(); 用户窗口视图 = 新用户窗口(); view.DataContext = viewModel; 视图.显示();

    有几种耦合视图和视图模型的选项:

    • 创建 View 和 ViewModel 并将 ViewModel 设置为 DataContext 属性(上面的代码)
    • 在 View 的构造函数中创建 ViewModel 并用它填充 DataContext 属性
    • 在 ViewModel 类型的视图中创建一个 Resource,并在 XAML 中填充 DataContext 属性

    我更喜欢第一个选项,因为您可以在运行时随意组合视图和视图模型。

    希望这是一个有用的答案。

    【讨论】:

      猜你喜欢
      • 2016-05-07
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多