WPF列表框命令
好的,我的程序简而言之有一个客户列表。 这些客户都列在列表框中,所以当点击他们的所有信息时,就会出现在表单上。 这通过数据绑定起作用,页面上的所有控件都绑定到列表框的selectedItem。
我现在想要做的是有一个消息对话框,询问用户在尝试更改选择时是否要保存。 如果他们不这样做,我想将它恢复到集合中的原始项目。 如果他们击中取消,我想让选择重新回到先前选择的项目。 我想知道以MVVM方式完成此操作的最佳方式是什么?
目前,我为我的客户建立了一个模型,我的虚拟机填充了列表框绑定的一组客户。 那么是否有办法处理虚拟机上的选择更改事件,其中包括能够操纵列表框的selectedIndex? 这是我的代码,所以你可以看到我在做什么。
if (value != _selectedAccount)
{
MessageBoxResult mbr = MessageBox.Show("Do you want to save your work?", "Save", MessageBoxButton.YesNoCancel);
if (mbr == MessageBoxResult.Yes)
{
//Code to update corporate
Update_Corporate();
_preSelectedAccount = value;
_selectedAccount = value;
}
if (mbr == MessageBoxResult.No)
{
//Do Stuff
}
if (mbr == MessageBoxResult.Cancel)
{
SelectedAccount = _preSelectedAccount;
NotifyPropertyChanged("SelectedAccount");
}
}
XAML:
<ListBox ItemsSource="{Binding Customers}" SelectedItem="{Binding SelectedCustomer}" DisplayMemberPath="CustomerName"/>
视图模型:
private Customer selectedCustomer;
public Customer SelectedCustomer
{
get
{
return selectedCustomer;
}
set
{
if (value != selectedCustomer)
{
var originalValue = selectedCustomer;
selectedCustomer = value;
dlgConfirm dlg = new dlgConfirm();
var result = dlg.ShowDialog();
if (!result.HasValue && result.Value)
{
Application.Current.Dispatcher.BeginInvoke(
new Action(() =>
{
selectedCustomerr = originalValue;
OnPropertyChanged("SelectedCustomer");
}),
System.Windows.Threading.DispatcherPriority.ContextIdle,
null
);
}
else
OnPropertyChanged("SelectedCustomer");
}
}
}
从这里采取/进一步的信息。
您可以捕获更改的事件的最佳方式是将列表框的SelectedItem绑定到视图模型中的另一个属性,然后在该集合上执行您需要执行的操作:
private Customer selectedCustomer;
public Customer SelectedCustomer
{
get { return selectedCustomer; }
set
{
if (selectedCustomer== value) return;
selectedCustomer = value;
RaisePropertyChanged("SelectedCustomer");
// Do your stuff here
}
}
这是一个使用MVVM光源(RaisePropertyChanged)的例子。
链接地址: http://www.djcxy.com/p/59891.html上一篇: WPF Listbox commands
下一篇: ListBox