Привязка XML WPF ComboBox И привязка модели представления?

У меня есть XML-файл со списком стран. Я использую XMLDataProvider в xaml для привязки ItemsSource выпадающего списка. У меня также есть viewModel со свойством, к которому я хотел привязать выбранное значение. Я пытался привязаться к модели просмотра, используя локальное пространство имен:

SelectedValuePath="Country"

SelectedValue="{Binding local:Project.ProjectInfo.CompanyCountry}"

Однако мне пришлось использовать DataContext для xmlProvider.

Есть ли способ заставить привязку работать в viewModel?

Заранее спасибо.


person jeremywho    schedule 11.02.2011    source источник
comment
вы устанавливаете свой viewModel как DataContext или нет?   -  person Snowbear    schedule 11.02.2011


Ответы (2)


Поместите свою ViewModel в свои .Resources и привяжите к этому?

<UserControl .... xmlns:local="Project">
    <UserControl.Resources>
        <local:ProjectInfo x:key="ProjectInfo"/>
    </UserControl.Resources>
    <UserControl.DataContext>
        <XmlObjectDataProvider ... />
    </UserControl.DataContext>
    <ComboBox ItemsSource="{Binding}" SelectedValuePath="Country" SelectedValue="{Binding CompanyCountry,Source={StaticResource ProjectInfo}}"/>

HTH. Обычно у вас есть два источника данных - один в контексте данных, а другой - в ваших ресурсах.

РЕДАКТИРОВАТЬ: вы можете переключить два, если это необходимо, на самом деле это не имеет значения. У вас может быть столько источников данных, сколько вам нужно в ваших ресурсах.

person Goblin    schedule 11.02.2011
comment
Это сработало отлично, спасибо! Пытался проголосовать за ваш комментарий, дон - person jeremywho; 12.02.2011
comment
@jeremywho: Поскольку это сработало, вы, вероятно, должны принять это как ответ, щелкнув контур галочки слева под голосами. - person H.B.; 10.03.2011

Если ваша ViewModel является общедоступным свойством представления, вы можете назвать свое представление и получить к нему доступ таким образом.

<Window Name="Window"
        ...>

<ComboBox SelectedValue="{Binding ElementName=Window, Path=ViewModel.Property}" ... />

...или что-то вроде того.

person H.B.    schedule 11.02.2011