Установите 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
,