0

MVVM アーキテクチャを使用して WPF で。対応するビューで最後に使用された ListBox であった ViewModel から判断することは可能ですか?

2 つの ListBox と TreeView があります。リストボックスにはさまざまな種類のリストが含まれており、それらを使用して複合データを TreeView に作成したいと考えています。

TreeView にも操作があるため、2 つの ListBoxes と TreeView の間で選択できるバージョンが必要です。

助けてくれてありがとう!

4

2 に答える 2

2

簡単に言うと、viewmodel内に任意のフラグを導入できます。このフラグは、指定されたListBoxのSelectedItemが変更されたときにオン/オフになります。何かのようなもの

プライベートbool_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");
        }
}

ofc。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>

あなたのviewModelで:

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 に答える