我有点疑惑: 这有效:
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<Label Content="Rol" />
<ComboBox ItemTemplate="{StaticResource listRollen}"
Height="23" Width="150"
SelectedItem="{Binding Path=SelectedRol, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
ItemsSource="{Binding Path=allRollen, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
并且SelectedRol的属性是:
public TblRollen SelectedRol
{
get { return _selectedRol; }
set
{
if (_selectedRol != value)
{
_selectedRol = value;
OnPropertyChanged("SelectedRol");
}
}
}
但这不起作用:
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<Label Content="Soort" />
<ComboBox ItemTemplate="{StaticResource listSoorten}"
Height="23" Width="150"
ItemsSource="{Binding Path=allSoorten}"
SelectedItem="{Binding Path=SelectedProduct, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
具有以下属性SelectedProduct:
public TblProduktSoorten SelectedProduct
{
get { return _selectedPSoort; }
set
{
if (_selectedPSoort != value)
{
_selectedPSoort = value;
OnPropertyChanged("SelectedProduct");
}
}
}
在我的代码中的某处我设置SelectedProduct = p.TblProduktSoorten
并在调试时,我看到属性设置正确...
答案 0 :(得分:5)
答案 1 :(得分:2)
尝试使用未选择的项目,但使用值路径查看代码示例
<ComboBox Name="projectcomboBox" ItemsSource="{Binding Path=Projects}" IsSynchronizedWithCurrentItem="True" DisplayMemberPath="FullName"
SelectedValuePath="Name" SelectedIndex="0" Grid.Row="1" Visibility="Visible" Canvas.Left="10" Canvas.Top="24" Margin="11,6,13,10">
</ComboBox>
绑定属性是
public ObservableCollection<Project> Projects
{
get { return projects; }
set
{
projects = value;
RaisePropertyChanged("Projects");
}
}
答案 2 :(得分:2)
这可能与apparently attribute order does matter这一事实有关,在第二种情况下,ItemsSource
和SelectedItem
声明已被交换。
答案 3 :(得分:1)
如果在属性更改事件处理程序中更改SelectedProduct时设置了SelectedProduct属性,则需要异步设置此属性。
private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "SelectedProduct")
App.Current.Dispatcher.InvokeAsync(() => SelectedProduct = somevalue);
}
答案 4 :(得分:0)
我不知道你是否修好了,但我今天遇到了同样的问题。 通过确保选定项的集合是ObservableCollection来修复它。
答案 5 :(得分:0)
我的问题是由我自己疲倦的大脑引起的。同样的症状,也许它将使您发现问题。
设置SelectedItem必须在列表中提供一个项目! (duhh)通常这是自然发生的,但是我遇到一个情况,我从另一个服务(对象类型相同)获得了一个“角色”,并试图对其进行设置并期望组合框会发生变化! ;(
而不是-
Roles = roles;
CurrentRole = role;
记住要这样做-
Roles = roles;
CurrentRole = roles.FirstOrDefault(e=> e.ID == role.ID); //(System.Linq)
答案 6 :(得分:0)
我认为这个问题是由ItemSource的类型和SelectedItem是mitchmatched引起的。
例如,如果 ItemSource 绑定到 int 列表,而 SelectedItem 绑定到 string。如果将所选项目设置为 null 或空字符串,则组合框无法知道选择了哪个项目。因此组合框将不显示任何内容。