2017-09-08 63 views
1

每次我在我的UI中更改我选择的项目时,它并没有更新我的组合框。Combox没有绑定更新

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(); 
    } 
} 

我的意思是在我的用户界面中,我有一个公司列表设置为组合框项目源,当我将组合框的值更改为另一家公司时,它不更新我的源代码,它保持默认状态。

我枚举可以解释这个问题的人:

[Description("Netpoint Solutions")] 
    Company1 = 0, 

    [Description("Blackhall Engineering")] 
    Company2 = 180, 
+0

您的描述转换器是什么样的?它是否被调用过?你的意思是“在我的用户界面里改变我选择的项目” - 这是否意味着你在这个特定的组合框中选择了一些东西?看到更多的代码会很有帮助。 –

+0

@PetterHesselberg更新线程。 –

回答

2

尝试删除Mode=OneWayToSource和事件处理程序:

SelectionChanged="CompanyComboBox_SelectionChanged" 

当你绑定SelectedItem你并不需要处理SelectionChanged事件属性。

还请确保您将DataContext设置为您的类的实例,其中SelectedCompany属性已定义。

0

你结合被定义为OneWayToSource。当你想从viewModel更新它时,你应该将它设置为TwoWay。

见绑定的文档了解更多信息:https://msdn.microsoft.com/de-de/library/ms752347(v=vs.110).aspx

编辑:

我跳过了,你有一个Enum作为源的一部分。我没有看到,您为Combobox定义了ItemsSource,这是在哪里完成的?传递到SelectedCompanysetter的值必须位于定义为ItemsSource的集合中。

对于枚举,你可以参考这个线程:How to bind an enum to a combobox control in WPF?

+0

我已将它设置为TwoWay,当我更改所选项目时仍然没有任何反应。 –

+0

我定义像这样的项目源CompanyComboBox.ItemsSource = Enum.GetValues(typeof(Company))。Cast (); –

+0

你预期会发生什么? – mm8