将ComboBox的SelectedItem设置为ListCollectionView中的item值

时间:2015-08-22 06:53:21

标签: c# wpf mvvm combobox selecteditem

我有一个ListCollectionView,它包含一堆对象Scene项。 Scene中的一个属性是Location。

当我浏览ListCollectionView时,我想在View中的comboBox中将Location属性的值设置为SelectedItem。每次我去ListCollectionView中的另一个项目时,我想在comboBox中将新位置显示为SelectedItem。

我知道如何在常规TextBox和TextBlock中使用它,但不能在ComboBox中使用。

视图模型

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}"/>

任何想法如何在ComboBox中为SelectedItem获得相同的行为。我在c#

中编码相当新

1 个答案:

答案 0 :(得分:0)

如果您Locations属性中定义的ListCollectionView所提供的Locations集合中定义的所有AllLocations都存在,那么您的代码应该有效。

例如,以下代码以及您当前在Xaml中定义的ComboBox按预期工作:

的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.SelectedItemTextBox.Text都会更改为您Item.Location中定义的下一个SceneCollectionView