Привязка текстового блока к значению словаря, где ключ задается пользовательским вводом - PullRequest
0 голосов
/ 31 января 2020

enter image description here

Выше приведено желаемое поведение, которое я пытаюсь получить. Значение в инструменте должно использоваться в качестве ключа для доступа к словарям, в которых хранятся цены. Предположим, у нас есть некоторая коллекция валют, которые представлены в элементе управления, например:

<ItemsControl Background="White" Name="currenciesList" ItemsSource="{Binding Currencies}">

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

<ComboBox Name="cmbbx" Height="20" Width="60" Grid.Column="1" ItemsSource="{Binding Path=InstrumentTypes}" SelectedItem="{Binding CurrencyInstrument}"  IsSynchronizedWithCurrentItem="False">
</ComboBox>
<TextBlock Name="purchase_price" Grid.Column="2" Text="{Binding What do I put here??}">
</TextBlock>
<TextBlock Name="sale_price" Grid.Column="3" Text="{Binding What do I put here??}"/>

Для привязок текстового блока я хотел бы иметь выражение, такое как PurchaseInstruments [CurrencyInstrument], где PurchaseInstruments - это свойство словаря, а CurrencyInstrument - еще одно свойство, хранящее ключевое значение для использования в словаре. Как мне добиться такого поведения?

Пожалуйста, игнорируйте плохое форматирование изображения.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2020

Решил проблему, привязав текстовые поля непосредственно к выбранному значению в выпадающем списке. Основная идея заключалась в инкапсуляции цены покупки и продажи в объекте CurrencyInstrument, чтобы мы могли напрямую обращаться к свойствам при привязке в текстовом поле. Ниже приведен код XAML.

<ComboBox Name="cmbbx" Height="20" Width="60" Grid.Column="1" SelectedIndex="0" ItemsSource="{Binding Path=InstrumentTypes}" DisplayMemberPath="Key" SelectedValuePath="Value" IsSynchronizedWithCurrentItem="False"></ComboBox>
<TextBlock Name="purchase_price" Grid.Column="2" Text="{Binding ElementName=cmbbx, Path=SelectedValue.PurchasePrice}"/>
<TextBlock Grid.Column="3" Text="{Binding ElementName=cmbbx, Path=SelectedValue.SalePrice}"/>

0 голосов
/ 31 января 2020

Словарь по сути является типом KeyValuePair, поэтому ваш XAML должен выглядеть примерно так:

<ComboBox Name="cmbbx" Height="20" Width="60" Grid.Column="1" 
      ItemsSource="{Binding Path=InstrumentTypes}" 
      SelectedValue="{Binding CurrencyInstrument}"  
      IsSynchronizedWithCurrentItem="False" DisplayMemberPath="Key" SelectedValuePath="Value"/>

<TextBlock Name="purchase_price" 
       Grid.Column="2" 
       Text="{Binding CurrencyInstrument.PurchasePrice}"/>

<TextBlock Name="sale_price" 
       Grid.Column="3" 
       Text="{CurrencyInstrument.SalePrice}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...