Привязка данных ComboBox WPF к DataView - PullRequest
3 голосов
/ 08 марта 2011

Допустим, у меня есть один элемент ComboBox и 2 элемента TextBox в моем графическом интерфейсе. И у меня есть один DataView с данными (Город, Индекс, Улица, ID). При инициализации всего этого я заполняю свой DataView некоторыми данными:)

City 1, 11111, Street 1, 1
City 1, 22222, Street 2, 2
City 1, 33333, Street 3, 3

Теперь я хочу связать это с моим ComboBox. DataView является членом класса с именем m_dvAdresses, но этот код не помогает:

ItemsSource="{Binding Source=m_dvAdresses}"
SelectedValuePath="ID"
DisplayMemberPath="Street">

Также я хочу, чтобы мои 2 элемента ComboBox отображали PostalCode и City, в зависимости от того, что я должен выбрать в своем ComboBox. Например, если я выберу «Улица 2», TextBox1 покажет мне «Город 1», а TexBox2 покажет мне «22222» ...

Как я могу связать их всех ТОЛЬКО в коде WPF?

Ответы [ 2 ]

2 голосов
/ 08 марта 2011

Если m_dvAddresses равно Поле, то WPF не может привязаться к нему . WPF может связываться только со свойствами CLR и WPF DependencyProperty s.

public DataView Addresses
{
     get { return m_dvAddresses; }
}

Кроме того, чтобы получить самый богатый опыт работы с WPF, рассмотрите возможность создания типа коллекции ObservableCollection (или некоторого производного от IBindingList). Таким образом, все изменения в самой коллекции соответствующим образом публикуются в графическом интерфейсе. Редактировать: теперь я понимаю, что вы используете DataView, который полностью привязывается.

Чтобы ответить на ваш второй вопрос (задайте ComboBox с x:Name="Address"):

<TextBox Text="{Binding SelectedItem.City, ElementName=Address}" />
<TextBox Text="{Binding SelectedItem.Zip, ElementName=Address}" />
0 голосов
/ 08 марта 2011

, что вам нужно сделать, это выставить m_dvAddresses как свойство из вашего класса, как указано @sixlettervariables.после этого для доступа к нему из XAML необходимо указать свойство RelativeSource для привязки, указывающей на сам класс, следующим образом (здесь мой элемент управления Window):

ItemsSource="{Binding Addresses, RelativeSource={RelativeSource AncestorType=Window}}"
Name="cmbAddresses"

Длятекстовые поля, вы должны указать их привязки следующим образом

<TextBox Name="TextBox1" 
         Text="{Binding SelectedItem.PostalCode, ElementName=cmbAddresses}"/>

аналогично для второго TextBox

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...