Связывание WPF ComboBox с перечислением - PullRequest
2 голосов
/ 23 февраля 2011

У меня есть поле со списком, у которого 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}"/>

1 Ответ

0 голосов
/ 24 февраля 2011

Я попробовал твой код, и он работает нормально, поэтому я не думаю, что порядок Привязок - твоя проблема. Одна вещь, которую я заметил, это то, что вы используете 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;
    }
}
...