如何在MVVM-WPF中获取所选项目

嗨我正在使用WPF和MVVM,我的应用程序中有“编辑/更新”面板,它更新了Grid中的选定数据。 它工作正常。 我想添加一个按钮“关闭按钮”和“一个检查以查看用户是否选择了项目。如果他没有选择任何项目并单击”编辑按钮“它将向用户显示一个消息框以选择项目要编辑。我不清楚的是如何通过“选择项目来做这两件事”并在关闭面板之前检查文本框字段中是否有任何文本。用户视图模型代码:

class UserViewModel { private IList _UsersList; public UserViewModel() { _UsersList = new List { new User{UserId = 1,FirstName="Raj",LastName="Beniwal",City="Delhi",State="DEL",Country="INDIA"}, new User{UserId=2,FirstName="Mark",LastName="henry",City="New York", State="NY", Country="USA"}, new User{UserId=3,FirstName="Mahesh",LastName="Chand",City="Philadelphia", State="PHL", Country="USA"}, new User{UserId=4,FirstName="Vikash",LastName="Nanda",City="Noida", State="UP", Country="INDIA"}, new User{UserId=5,FirstName="Harsh",LastName="Kumar",City="Ghaziabad", State="UP", Country="INDIA"}, new User{UserId=6,FirstName="Reetesh",LastName="Tomar",City="Mumbai", State="MP", Country="INDIA"}, new User{UserId=7,FirstName="Deven",LastName="Verma",City="Palwal", State="HP", Country="INDIA"}, new User{UserId=8,FirstName="Ravi",LastName="Taneja",City="Delhi", State="DEL", Country="INDIA"} }; } public IList Users { get { return _UsersList; } set { _UsersList = value; } } private ICommand mUpdater; public ICommand UpdateCommand { get { if (mUpdater == null) mUpdater = new Updater(); return mUpdater; } set { mUpdater = value; } } private class Updater : ICommand { #region ICommand Members public bool CanExecute(object parameter) { return true; } public event EventHandler CanExecuteChanged; public void Execute(object parameter) { } #endregion } } } 

用户视图Window.Xaml Panel1

                          

是Panel2:

             

(如果我的问题不清楚你请问我。谢谢你)

在ViewModel中创建一个属性以保存所选用户:

 public User SelectedUser { get; set; } 

将ListView的SelectedItem绑定到此属性:

  

现在您只需检查SelectedUser属性是否为null。

如何通过“选择项目做这两件事”

这通常可以使用视图模型中的SelectedSomething属性来实现。 此属性应绑定到SelectedItem的控件。

并在关闭面板之前检查是否有文本框字段中的任何文本

这称为“validation”。 WPF以多种方式支持validation,其中一种方法是在视图模型中实现IDataErrorInfo 。 我推荐这种方式,因为它是.NET的事实标准(它也用于WinForms和ASP .NET)。

一检查用户是否选择了项目。 如果他没有选择任何项目并单击“编辑按钮”它将向用户显示一个MessageBox以选择要编辑的项目

通常,这通过ICommand实例解决,绑定到按钮。 如果ICommand.CanExecute返回false,则绑定按钮将被禁用。

例如,您应检查CanExecute for command中的validation错误,绑定到Close按钮,如果有任何错误,则返回false。 或者,您应该在CanExecute检查SelectedSomething属性以获取命令,绑定到Edit按钮,如果SelectedSomething == null ,则返回false

在MVVM中,如果使用RelayCommand / DelegateCommand作为默认的ICommand实现,事情会变得更容易。

更新

命令的代码示例。 查看型号:

 public class UserViewModel { public UserViewModel() { EditCommand = new RelayCommand(EditSelectedUser, () => SelectedUser != null); } private void EditSelectedUser() { // some edit code here } public User SelectedUser { get; set; } public ICommand EditCommand { get; private set; } } 

XAML: