0

トピックのリストがあり、各トピックにはいくつかの例があります。私ができるようにしたいのは、トピックが選択されたときに、その選択されたトピックのすべての例を別のビューに入力することです。私はまだMVVMを学んでいるので、そのような実装方法がわかりません。

編集: 私がやろうとしているのは、2 つの個別のビュー (トピック用に 1 つと例用に 1 つ) を用意することです。トピックが選択されると、例のコレクションに「動的に」入力し、それらを例のビューのリストボックス。

これは私がこれまでに持っているものです。私の考えは、例の ViewModel を TopicViewModel に渡すことですが、両方のビューがメイン ウィンドウの XAML に設定されている場合、どうすればよいかわかりません。

public TopicViewModel SelectedTopic
{
    get { return _selectedTopic; }
    set
    {
        _selectedTopic = value;
        OnPropertyChanged("SelectedTopic");

        //refresh list of exercises
        if (_exampleViewModel != null)
        {
            _exampleViewModel.RefreshExercises(_selectedTopic.ID);
        }
    }
}
4

3 に答える 3

2

次のようなものがあるとします。

class Topic
{
    public ObservableCollection<Example> Examples { get; private set; }
}

そしてあなたのViewModelのどこかでこれ:

public ObservableCollection<Topic> Topics { get; private set; }

次に、トピック リストボックスのバインディングは次のようになります。

<ListBox x:Name="topicsListBox" ItemsSource="{Binding Topics}" />

Examples次に、次のように、この ListBox の選択された項目にバインドできます。

<ListBox x:Name="examplesListBox" 
         ItemsSource="{Binding SelectedItem.Examples, ElementName=topicsListBox}"/>
于 2013-05-14T06:21:12.947 に答える
0

作業する必要があるデータの量にもよりますが、私見で最も簡単な方法はこれです。

まず、すべてのリストに ObservableCollection を使用します

各トピック ビュー モデルに例のリストが含まれるトピック ビュー モデルのリストを含むメインの親ビュー モデルを用意する

親ビュー モデルには、現在選択されているトピックを保持するプロパティがあります。

ビューでは、2 つのリストボックスを使用できます。1 つはトピックのリストにバインドされています。もう 1 つは、選択されたトピックの例のリストにバインドされています。

このようなものを使用した例がウェブ上に山ほどあります。このstackoverflowの質問は、リストと選択されたアイテム MVVMにバインドする方法を示しています:ListBox.SelectedItemにバインドしますか?

于 2013-05-14T06:28:51.873 に答える