1

私は Silverlight の初心者で、この mvvm パターンはすべて少し混乱しています。

私のアプリケーションには、国用と州用の 2 つのリストボックスがあります。

私がやりたいことは、listbox1 から国を選択すると、2 番目のリストボックスに選択した国の州が表示されることです。

つまり、xaml のコマンドを listboxitem にバインドしたいと考えています。

Googleで解決策を見つけようとしましたが、解決策が複雑すぎて理解できなかったか、プリズムやライトなどの異なるmvvmパターンを使用していました.

4

1 に答える 1

1

これを行うには、いくつかの異なる方法があります。

1 :(最も簡単です!)最初のリストボックスのSelectedItemをViewModelにバインドします。ViewModelプロパティのセッターで、バインドするリストを2番目のリストボックスに変更します。ViewModelプロパティは、リストが変更されたことを通知するためにINotifyPropertyChangedを使用する必要があることに注意してください。

例:xamlが次のようになっている場合:

<ListBox ItemSource="{Binding ListOne}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}"/>
<ListBox ItemSource="{Binding ListTwo}"/>

その場合、ViewModelは次のようになります。

public List<MyItem> ListOne { get; set; }

private MyItem _selectedItem
public MyItem SelectedItem
{
    get { return _selectedItem; }
    set
    {
        _selectedItem = value;
        ListTwo = _selectedItem.SubItems;
    }
}

private List<MyOtherItem> _listTwo
public List<MyOtherItem> ListTwo
{
    get { return _listTwo; }
    set
    {
        _listTwo = value;
        RaisePropertyChanged("ListTwo");
    }
}

2:2番目のリストのデータが文字通り最初のリストのアイテムのプロパティである場合、xamlのBindingを使用してそれらを直接結合できます。

ItemSource="{Binding Path=SelectedItem.MyItemsProperty, ElementName=MyFirstListBoxName}"

3:EventTriggerをEventToCommandとともに使用して、SelectedItemChangedイベントをコマンド実行に変えることができます。コマンドを文字通りListBoxItemにバインドしているのではなく、コマンドを変更にバインドしているのです。

最初のオプションをお勧めします。これは最も簡単で、複雑になりすぎずに何が起こっているかを適切に制御できます。

于 2012-11-09T03:42:02.137 に答える