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