每次我在我的UI中更改我选择的项目时,它都不会更新我的组合框。
XAML
<ComboBox x:Name="CompanyComboBox" HorizontalAlignment="Left" Height="26"
Margin="100,41,0,0" VerticalAlignment="Top" Width="144"
SelectionChanged="CompanyComboBox_SelectionChanged"
SelectedItem="{Binding SelectedCompany, UpdateSourceTrigger=PropertyChanged, Mode=OneWayToSource}">
<ComboBox.ItemTemplate>
<DataTemplate>
<ContentPresenter
Content="{Binding Converter={StaticResource DescriptionConverter}}">
</ContentPresenter>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
C#
private Company _selectedCompany;
public Company SelectedCompany
{
get { return _selectedCompany; }
set
{
if (value == _selectedCompany)
return;
_selectedCompany = value;
OnPropertyChanged(nameof(SelectedCompany));
}
}
只是为了澄清公司类实际上是一个ENUM
DescriptionConverter:
public class CompanyDescriptionConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var type = typeof(Company);
var name = Enum.GetName(type, value);
FieldInfo fi = type.GetField(name);
var descriptionAttrib = (DescriptionAttribute)
Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute));
return descriptionAttrib.Description;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
在我的UI中我的意思是,我有一个设置为组合框项目源的公司列表,当我将组合框值更改为另一家公司时,它在我的源代码中没有更新,它保持&# 39;默认为。
My Enum可能会为某人澄清问题:
[Description("Netpoint Solutions")]
Company1 = 0,
[Description("Blackhall Engineering")]
Company2 = 180,
答案 0 :(得分:2)
尝试删除Mode=OneWayToSource
和您的事件处理程序:
SelectionChanged="CompanyComboBox_SelectionChanged"
绑定SelectionChanged
属性时,不需要处理SelectedItem
事件。
另外,请确保将DataContext
设置为您的类的实例,其中SelectedCompany
属性已定义。
答案 1 :(得分:0)
您的绑定被定义为OneWayToSource。如果希望从viewModel更新它,则应将其设置为TwoWay。
有关详细信息,请参阅Bindings文档:https://msdn.microsoft.com/de-de/library/ms752347(v=vs.110).aspx
编辑:
我跳过了以Enum
为源的部分。我没有看到,您为ItemsSource
定义Combobox
,这是完成的?传递给setter
的{{1}}的值必须位于定义为SelectedCompany
的集合中。
对于枚举,您可以参考此主题:How to bind an enum to a combobox control in WPF?