2016-07-06 5 views
0

У меня есть ComboBox, который имеет SortedList<int, double> как ItemsSource, который содержит количество предметов и цену (что довольно сложно сделать). Пользователь может выбрать количество элементов, а на textbox на странице показана цена за эти товары. Следовательно, я установил DisplayMember в NumberOfItems и ValueMember в цену. Это прекрасно работает.Bind ComboBox to Displaymember to Object

Однако теперь я хочу сохранить количество элементов в классе Orders; не цена! Я не мог найти примеров того, как это сделать, только привязка к SelectedValue, чего я не хочу делать. (I'am хорошо известно, что такое использование является выпадающий список совсем «наоборот» :))

Я попытался связывания с SelectedItem, но это не похоже на работу:

BindingOperations.SetBinding(NumberOfItemsCombo, ComboBox.SelectedItemProperty, new Binding("NumberOfItems") { Source = Order}); 

Можно ли связать NumberOfItems с чем-то вроде «SelectedDisplayValue»?

Спасибо!

Изменить: Пример: SortedList содержит следующие значения:

Index NumberOfItems Price 
[0]: {[1,   41]} 
[1]: {[2,   82]} 
[2]: {[3,   123]} 
[3]: {[4,   164]} 
[4]: {[5,   205]} 
[5]: {[6,   246]} 
[6]: {[7,   287]} 
[7]: {[8,   328]} 
[8]: {[9,   369]} 
[9]: {[10,   410]} 

выпадающий список должен Dispay в NumberOfItems столбцов (т.е. 1 - 10). Если пользователь выбирает значение, например 7, текстовое поле отображает цену в примере 287. Класс заказа имеет свойство NumberOfItems, которое я хочу связать с ComboBox. Поэтому, как только свойство установлено на определенное число, скажем, 6, выпадающий список должен отображать 6 и текстовое поле 246.

Edit II:

Благодарности к Liero теперь он отлично работает в XAML. Теперь мне нужно только привязать текстовое поле в коде. Однако, это не работает:

BindingOperations.SetBinding(PriceTextBox, TextBox.TextProperty, new Binding() { Source=ComboBox, Path = new PropertyPath("SelectedItem.Price") }); 

Фигурные это: направление не было. Теперь это работает!

BindingOperations.SetBinding(PriceTextBox, TextBox.TextProperty, new Binding() { Source=ComboBox, Path = new PropertyPath("SelectedItem.Price"), Mode = BindingMode.OneWay }); 
+1

Я застрял в этом sentense: 'Тем не менее, теперь я хочу, чтобы сохранить количество элементов в классе заказов; не цена! 'Попробуйте переформулировать свой вопрос или предоставить текущий код. Что теперь ваш ItemsSource? – Liero

ответ

1

вы хотите заменить SortedList где ключ NumberOfItems и значение Цена с чем-то более интуитивным ли?

public class Order 
{ 
    public int NumberOfItems {get; set;} 
    public double Price {get; set;} 
} 

comboBox1.ItemsSource = new List<Order> 
{ 
    new Order { NumberOfItems = 1, Price = 20 } 
    new Order { NumberOfItems = 2, Price = 40 } 
} 
<ComboBox x:Name="comboBox1" DisplayMemberPath="NumberOfItems"/> 
<TextBlock Text="{Binding SelectedItem.Price, ElementName=comboBox1}" /> 
+0

Спасибо. Как показано в моем последнем редактировании, теперь он работает в xaml, но я застрял, теперь выполняю привязку в коде ...;) –

+0

Я использовал «TextBlock» в моем примере, ваш код использует «TextBox», который отличается от другого – Liero

+0

Это была только проблема отсутствия привязки. Как только я добавил, что он работает нормально. Еще раз спасибо!! –