0

在 WPF 中使用 MVVM 架构。是否可以从 ViewModel 确定相应视图上最后使用的 ListBox 是哪一个?

我有 2 个 ListBoxes 和一个 TreeView。列表框包含不同类型的列表,我想用它们在 TreeView 中创建复合数据。

我想要一个可以在两个 ListBox 和 TreeView 之间进行选择的版本,因为我也有 TreeView 的操作。

谢谢帮助!

4

2 回答 2

2

为简单起见,您可以在 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 属性使用绑定,它将起作用。

于 2012-11-06T21:25:20.393 回答
0

您可以检查选定的更改以查看谁是最后一个 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";
}
于 2012-11-08T18:38:33.523 回答