ComboBox ItemsSource имеет другой текст данных, чем SelectedItem

У меня есть ComboBox, где я получаю свой ItemsSource из моего объекта «Настройки» с UserTypes ObservableCollection внутри, и мне нужно привязать его SelectedItem к свойству типа моего объекта «Сотрудник». В окне есть другие поля, которые правильно привязываются к другим свойствам в объекте «Сотрудник», ItemsSource правильно заполняется свойством UserTypes в Настройках, и единственное, что не работает, - это свойство типа, не связанное с комбо. 'x selecteditem, возможно потому, что для его контекста данных задан объект «Настройки». Вот что у меня есть на данный момент:

<CollectionViewSource x:Key="settingsViewSource" d:DesignSource="{d:DesignInstance my:Settings, CreateList=True}" />
<CollectionViewSource x:Key="settingsUserTypesViewSource" Source="{Binding Path=UserTypes, Source={StaticResource settingsViewSource}}" />

<ComboBox DataContext="{StaticResource settingsUserTypesViewSource}" Name="userTypeBox" VerticalAlignment="Top" Width="100" Margin="2" ItemsSource="{Binding}"
SelectedItem="{Binding Path=Type, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">

В коде позади у меня есть:

        InitializeComponent();
        this.emp = emp;
        InfoTab.DataContext = emp;
        userTypeBox.DataContext = MainWindow.ViewSettings.UserTypes;

emp - это конкретный сотрудник, правильно привязанный к полям, только выбранный элемент поля со списком не работает. Любая помощь будет принята с благодарностью.


person Erika    schedule 18.07.2012    source источник
comment
Просто подумайте ... ¿У ваших объектов есть свойство Type? Попробуйте изменить это имя, так как System.Type уже существует.   -  person NestorArturo    schedule 19.07.2012
comment
это совершенно не помогло и раньше не было проблем с этим   -  person Erika    schedule 19.07.2012
comment
пожалуйста, опубликуйте свой соответствующий код ViewModel, где находятся ограниченные свойства ...   -  person marc wellman    schedule 19.07.2012


Ответы (1)


Я не знаю, есть ли у вас опечатка в фактическом коде или она просто здесь, но вам не хватает скобки

SelectedItem="Binding Path=Type, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"

должно быть

SelectedItem="{Binding Path=Type, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
person LadderLogic    schedule 18.07.2012
comment
есть ли у вас ошибки привязки к печати при отладке? Он должен быть в строке System.Windows.Data Error: 40: BindingExpression path error: - person LadderLogic; 19.07.2012
comment
System.Windows.Data Ошибка: 40: ошибка пути BindingExpression: свойство UserType не найдено в объекте ObservableCollection1' (HashCode=50419575)'. BindingExpression:Path=UserType; DataItem='ObservableCollection1 (HashCode = 50419575); целевой элемент - ComboBox (Name = 'userTypeBox'); целевым свойством является SelectedItem (тип Object) - person Erika; 19.07.2012
comment
кстати, я также изменил имя свойства Type на UserType, как было предложено Марком, хотя я изменил все остальное на UserType, поэтому я не знаю, в чем проблема - person Erika; 19.07.2012
comment
Эта ошибка привязки рассказывает всю историю. Он пытается установить свойство SelectedItem в вашей коллекции ObservableCollection, которая, очевидно, не имеет свойства UserType. Это потому, что вы устанавливаете DataContext в Collection, а не в Source Source. Установите DataContext на ViewModel и ItemSource на свой статический источник. - person LadderLogic; 19.07.2012
comment
ItemsSource = {Binding Source = {StaticResource settingsUserTypesViewSource} ... это то, что я добавил вместо этого, и теперь поле со списком пусто - person Erika; 19.07.2012
comment
опубликуйте ответ здесь для будущих ссылок. - person LadderLogic; 19.07.2012