Установите SelectedItem ComboBox в значение элемента в ListCollectionView

У меня есть ListCollectionView, который содержит кучу предметов объекта сцены. Одним из свойств в сцене является местоположение.

Когда я перемещаюсь по ListCollectionView, я хочу установить значение свойства Location как SelectedItem в comboBox в представлении. Каждый раз, когда я перехожу к другому элементу в ListCollectionView, я хочу показать новое местоположение как SelectedItem в comboBox.

Я знаю, как заставить это работать в обычном TextBox и TextBlock, но не в ComboBox.

ViewModel

public ListCollectionView SceneCollectionView { get; set; }
private Scene CurrentScene
{
    get { return SceneCollectionView.CurrentItem as Scene; }
    set
    {
        SceneCollectionView.MoveCurrentTo(value);
        RaisePropertyChanged();
    }
}

Посмотреть

<ComboBox  SelectedItem="{Binding SceneCollectionView/Location, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding AllLocations}}"/>

Для текстовых полей следующее работает отлично, но не для комбинированных

 <TextBox Text="{Binding SceneCollectionView/Location, UpdateSourceTrigger=PropertyChanged}"/>

Любая идея, как я могу получить такое же поведение для SelectedItem в ComboBox. Я довольно новичок в кодировании в C#

1 ответ

Я упал Locations определено в прилагаемой коллекции для вашего ListCollectionView существуют в Locations определены в вашем AllLocations свойство, то ваш код должен работать.

Например, следующий код вместе с ComboBox вы в настоящее время определили в вашем Xaml работает, как вы ожидаете:

Xaml:

<Grid>
    <ComboBox SelectedItem="{Binding SceneCollectionView/Location, UpdateSourceTrigger=PropertyChanged}" 
              ItemsSource="{Binding AllLocations}"/>
    <TextBox Text="{Binding SceneCollectionView/Location, UpdateSourceTrigger=PropertyChanged}"/>
    <Button  Content="SelectNext" Click="Button_Click"/>
</Grid>

Код:

    public ListCollectionView SceneCollectionView { get; set; }
    public List<string> AllLocations { get; set; }
    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;

        var scenes = new List<Scene>();
        scenes.Add(new Scene { Location = "location1"});
        scenes.Add(new Scene { Location = "location2"});
        scenes.Add(new Scene { Location = "location3" });
        SceneCollectionView = new ListCollectionView(scenes);

        AllLocations = new List<string> { "location1", "location2", "location3" };
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        SceneCollectionView.MoveCurrentToNext();
    }

В приведенном выше коде, когда вы нажимаете Button, И то и другое ComboBox.SelectedItem а также TextBox.Text изменения к следующему Item.Location определены в вашем SceneCollectionView,

Другие вопросы по тегам