在 WPF 中使用 MVVM 架构。是否可以从 ViewModel 确定相应视图上最后使用的 ListBox 是哪一个?
我有 2 个 ListBoxes 和一个 TreeView。列表框包含不同类型的列表,我想用它们在 TreeView 中创建复合数据。
我想要一个可以在两个 ListBox 和 TreeView 之间进行选择的版本,因为我也有 TreeView 的操作。
谢谢帮助!
为简单起见,您可以在 viewmodel 中引入任何标志,当指定 ListBox 的 SelectedItem 更改时,该标志将打开/关闭。就像是
私人布尔_isFirstBoxWasLastChanged;
object FirstListSelectedItem
{
get { return _fSelectedItem;}
set {
_fSelectedItem = value;
_isFirstBoxWasLastChanged = true;
RaisePropertyChanged("FirstListSelectedItem");
}
}
object SecondListSelectedItem
{
get { return _sSelectedItem;}
set {
_sSelectedItem = value;
_isFirstBoxWasLastChanged = false;
RaisePropertyChanged("SecondListSelectedItem");
}
}
俄亥俄州 如果您对 SelectecItem 属性使用绑定,它将起作用。
您可以检查选定的更改以查看谁是最后一个 ListBox
<StackPanel>
<ListBox ItemsSource="{Binding lstItens}" SelectedItem="{Binding itemSelected}" />
<ListBox ItemsSource="{Binding lstItensTwo}" SelectedItem="{Binding itemSelectedTwo}" />
</StackPanel>
在您的视图模型上:
class ViewModel : INotifyPropertyChanged
{
private string vmFlagType;
public string VmFlagType
{
get { return vmFlagType; }
set
{
vmFlagType = value;
OnPropertyChanged("VmFlagType");
}
}
private ObservableCollection<string> lstItens;
public ObservableCollection<string> LstItens
{
get { return lstItens; }
set
{
lstItens = value;
OnPropertyChanged("LstItens");
}
}
private ObservableCollection<string> lstItensTwo;
public ObservableCollection<string> LstItensTwo
{
get { return lstItensTwo; }
set
{
lstItensTwo = value;
OnPropertyChanged("LstItensTwo");
}
}
private string itemSelected;
public string ItemSelected
{
get { return itemSelected; }
set
{
itemSelected = value;
VmFlagType = flagTypes.ListOne;
OnPropertyChanged("ItemSelected");
}
}
private string itemSelectedTwo;
public string ItemSelectedTwo
{
get { return itemSelectedTwo; }
set
{
itemSelectedTwo = value;
VmFlagType = flagTypes.ListTwo;
OnPropertyChanged("ItemSelectedTwo");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
只需创建一个类来帮助您确定最后一次更改了哪个列表:
public class flagTypes
{
public const string ListOne = "ListOne";
public const string ListTwo = "ListTwo";
}