我有一个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#
中编码相当新答案 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.SelectedItem
和TextBox.Text
都会更改为您Item.Location
中定义的下一个SceneCollectionView
。