2

私はWPFコンボボックスを持っています:

<ComboBox ... ItemsSource="{Binding Source={StaticResource viewModel}, Path=getItems, Mode=OneTime}" x:Name="combobox" SelectionChanged="combobox_SelectionChanged">
    ...
</ComboBox>

たくさんのアイテムで。

そして私のViewModelクラス:

public class ViewModel
{
    private readonly ObservableCollection<ObjectA> _objectACollection= new ObservableCollection<ObjectA>(); 

    public ViewModel()
    { 
        _objectACollection.Add(new ObjectA("Text 1", "Text", "Text"));
        _objectACollection.Add(new ObjectA("Text 2", "Text", "Text"));
        _objectACollection.Add(new ObjectA("Text 3", "Text", "Text"));
    }

    public void combobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        Trace.WriteLine(combobox.SelectedIndex);
    }

    public ObservableCollection<ObjectA> getItems
    {
        get { return _objectACollection; }
    }
}

および selectionChanged リスナー:

private void combobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    Trace.WriteLine(combobox.SelectedIndex);
}

ComboBox が表示され、何かを選択すると、コレクション オブジェクトのインデックスが取得されます。しかし、私にオブジェクトを返す方法はありますか? 例: ComboBox (インデックス 0) の最初の要素を選択します。(combobox_SelectionChanged リスナーで) インデックス 0 の _objectACollection からオブジェクトを取得するにはどうすればよいですか?

4

3 に答える 3

3

ComboBox の SelectedItem プロパティがあります。SelectedItem を TwoWay で VM にバインドできると思います。以下は例です。これが役立つことを願っています。

<ComboBox ... ItemsSource="{Binding Source={StaticResource viewModel}, Path=getItems, Mode=OneTime}" x:Name="combobox"  SelectedItem="{Binding SelectedObjectA, Mode=TwoWay}">
...
</ComboBox>

VM に SelectedObjectA プロパティを追加する必要があります。VM.SelectedObjectA プロパティから選択項目を取得できます。

    private ObjectA _SelectedObjectA;
    public ObjectA SelectedObjectA
    {
        get
        {
            return _SelectedObjectA;
        }
        set
        {
            if (_SelectedObjectA == value)
                return;

            _SelectedObjectA = value;

            // Notifu changed here
        }
    }
于 2012-04-26T06:48:44.470 に答える
2

コンボボックス.SelectedItem を使用できます。

于 2012-04-26T06:42:18.373 に答える
0

おそらく、インターフェイスを実装するコレクションを使用してみることができますが、いくつか焼き付けられていると確信しています。ビューモデルに別のプロパティをICollectionView必要とせずに、コレクション内の選択されたアイテムを追跡します。SelectedObjectAしたがって、次のことができます。

> <ComboBox ... ItemsSource="{Binding Source={StaticResource viewModel},
> Path=**SomeICollectionView**, Mode=OneTime}" x:Name="combobox"> ...
> </ComboBox>

ビューモデルクラスから選択したアイテムを取得するには、あなたがしなければならないことはすべてですSomeICollectionView.CurrentItem

于 2012-04-26T07:30:41.033 に答える