Combox未使用绑定进行更新

时间:2017-09-08 11:27:14

标签: c# wpf xaml

每次我在我的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,

2 个答案:

答案 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?