Привязка WPF ComboBox к перечислению

У меня есть поле со списком, в котором ItemsSource привязан к перечислению с помощью ObjectDataProvider, а его свойство SelectedItem привязано к свойству бизнес-объекта. По какой-то причине он сначала связывает SelectedItem, а затем ItemsSource, поэтому перезаписывает мое значение по умолчанию для свойства businessobject. Есть идеи, почему и, возможно, исправить? Заранее спасибо.

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}"/>

person Ling Xing    schedule 23.02.2011    source источник
comment
Может быть, это поможет: WPF ObjectDataProvider - Binding Enum to ComboBox   -  person    schedule 06.11.2012


Ответы (1)


Я пробовал ваш код, и он работает нормально, поэтому я не думаю, что порядок привязок является вашей проблемой. Я заметил одну вещь: вы используете GetNames в качестве MethodName для ObjectDataProvider, поэтому ComboBox ItemsSource будет коллекцией строк, а не перечислением Unit. Если это ваше намерение, тогда Свойство Unit должно иметь тип string.

Пример

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

Если вы измените GetNames на GetValues, это будет работать для свойства типа enum Unit

Пример

public class ValuesViewModel
{
    public ValuesViewModel(Unit unit)
    {
        Unit = unit;
    }
    public Unit Unit
    {
        get;
        set;
    }
}
person Fredrik Hedblad    schedule 23.02.2011
comment
Боже мой, я так долго пытался это отладить. Большое спасибо, теперь он работает отлично. - person Ling Xing; 24.02.2011