(此问题已更新)
我有:
- Window1 -带
DataGrid
- Window2 -在那里我创建新的
DataGrid
行 - Window3 -我打开
DataGrid
行作为配置文件查看其
我的问题:
当我打开Window3时,组合框没有显示我在Window2中选择的项目
在Window2中的组合框是这样绑定的:
<ComboBox
Text="{Binding PropertyName, UpdateSourceTrigger=PropertyChanged}">
<ComboBoxItem Content="AS">
</ComboBoxItem>
<ComboBoxItem Content="ASA">
</ComboBoxItem>
<ComboBoxItem Content="ANS">
</ComboBoxItem>
<ComboBoxItem Content="EPF">
</ComboBoxItem>
</ComboBox>
我更喜欢保持这样,只是硬编码在项目中,因为可能不会有更多的。
当我保存它时,我切换到Window1,打开我刚保存的行
DataGrid
SelectedItem
是由属性(名为"Selected"),这对每个对象在Window3(几个文本框-这些工作很好,和一个组合框-不工作!)。ComboBox存储了我需要的数据,但没有将我之前的选择显示为SelectedItem
。
在Window3的组合框是这样绑定的:
<ComboBox
DataContext="{Binding Path=(viewmodel:LicenseHolderViewModel.Selected)}"
Text="{Binding PropertyName, UpdateSourceTrigger=PropertyChanged}">
<ComboBoxItem Content="AS">
</ComboBoxItem>
<ComboBoxItem Content="ASA">
</ComboBoxItem>
<ComboBoxItem Content="ANS">
</ComboBoxItem>
<ComboBoxItem Content="EPF">
</ComboBoxItem>
</ComboBox>
因此,项目显示在ComboBox中,但默认情况下没有选择任何项目。如果我从XAML中删除ComboBoxItem
,则ComboBox只是空的(自然)。我试着添加ItemsSource="{Binding PropertyName}"
(..a shot in dark),这只是添加了一个项目,分为三个(E, P, F),但它们都没有设置为SelectedItem
。
可能值得注意的是,我的框架自动耦合视图与视图模型,我必须设置另一个viewmodels属性作为每个对象DataContext,可能会导致一些问题?(我试着测试了一下,但我不能确认是不是这样)。
您应该将所选ComboBoxItem
的Content
绑定到source属性。为此,您应该将其绑定到SelectedValue
属性,并设置SelectedValuePath
属性:
<ComboBox
SelectedValue="{Binding PropertyName, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="Content">
<ComboBoxItem Content="AS">
</ComboBoxItem>
<ComboBoxItem Content="ASA">
</ComboBoxItem>
<ComboBoxItem Content="ANS">
</ComboBoxItem>
<ComboBoxItem Content="EPF">
</ComboBoxItem>
</ComboBox>
你有SelectedItem="{Binding PropertyName}">
但是SelectedItem的类型是ComboBoxItem。
你想要
SelectedValue="{Binding PropertyName}">
可以绑定到ComboBox。文本:
Text="{Binding PropertyName, Mode=OneWayToSource}" >