2011-02-23 140 views
2

我有一个组合框,它具有使用ObjectDataProvider绑定到枚举的ItemsSource,它的SelectedItem属性绑定到一个业务对象的属性。 出于某种原因,它首先绑定SelectedItem,然后绑定ItemsSource,因此覆盖BusinessBject属性上的默认值。任何想法为什么可能修复? 在此先感谢。WPF组合框与枚举绑定

XAML:

<CollectionViewSource x:Key="Units"> 
    <CollectionViewSource.Source> 
      <ObjectDataProvider MethodName="GetNames" ObjectType="{x:Type sys:Enum}"> 
       <ObjectDataProvider.MethodParameters> 
        <x:Type TypeName="BO:Unit"/> 
       </ObjectDataProvider.MethodParameters> 
      </ObjectDataProvider> 
    </CollectionViewSource.Source> 
</CollectionViewSource> 

<ComboBox Grid.Column="1" HorizontalAlignment="Right" Width="80" 
      ItemsSource="{Binding Source={StaticResource Units}}" 
      SelectedItem="{Binding Path=Unit}"/> 
+2

可能会帮助:[WPF ObjectDataProvider - 绑定枚举到ComboBox](http://www.codearsenal.net/2012/11/wpf-objectdataprovider-binding-enum-to-combobox.html) – 2012-11-06 05:07:06

回答

0

我想你的代码,它的正常工作,所以我不认为绑定的顺序是你的问题。我注意到的一件事是,您使用GetNames作为ObjectDataProvider的MethodName,因此ComboBox ItemsSource将是字符串集合,而不是枚举Unit。如果这是你的意图,则物业Unit应类型的string

public class NamesViewModel 
{ 
    public NamesViewModel(string unit) 
    { 
     Unit = unit; 
    } 
    public string Unit 
    { 
     get; 
     set; 
    } 
} 

如果更改GetNamesGetValues它会为枚举类型的物业工作Unit

示例

public class ValuesViewModel 
{ 
    public ValuesViewModel(Unit unit) 
    { 
     Unit = unit; 
    } 
    public Unit Unit 
    { 
     get; 
     set; 
    } 
} 
+0

omg它花了我这么长时间去尝试调试这个。非常感谢,它现在完美运作。 – 2011-02-23 21:51:59