Привязка к экземпляру ItemsSource - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть ListBox в пользовательском элементе управления WPF, который определен как

<ListBox Grid.Row="1" ScrollViewer.CanContentScroll="False" Background="#00000000" BorderThickness="0" ItemsSource="{Binding BuyItNowOptions}"
                                           ItemTemplate="{DynamicResource BuyItNowDataTemplate}" IsSynchronizedWithCurrentItem="True"
                                           Style="{DynamicResource InheritEmptyListStyle}" SelectedItem="{Binding SelectedResearch}" ItemContainerStyle="{DynamicResource ListBoxItemStyle}"/>

BuyItNowOptions - это открытое свойство ViewModel, имеющее тип ObservableCollection

В BuyItNowDataTemplate у меня есть метка, которая должна иметь некоторую логику перед отображением цены.

<Label Padding="1" HorizontalContentAlignment="Stretch" Grid.Column="2" Grid.Row="2" Margin="1">
                    <TextBlock Text="{Binding ExchangePrice, StringFormat=C}"
                        Visibility="{Binding ReturnRequired, Converter={StaticResource BooleanToVisibilityConverter}}"/>
                </Label>

Привязка здесь указывает, что она будет использовать свойство ExchangePrice экземпляра AutoResearchProxy, на котором оно установлено, например BuyItNowOptions [CurrentIndex] .ExchangePrice.

Я хотел бы знать, можно ли создать привязку таким образом, чтобы она ссылалась на весь экземпляр AutoResearchProxy, чтобы я мог передать его конвертеру и манипулировать несколькими свойствами AutoResearchProxy и вернуть вычисленную цену

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

public class PriceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,        System.Globalization.CultureInfo culture)
{
  if (value is AutoResearchProxy)
  {
    var research = value as AutoResearchProxy;
    //Some logic to figure out actual price

  }
  else
    return String.Empty;
}

Надеюсь, это имеет смысл.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2011

Вы можете передать весь объект datacontext объекту Binding, не указав Path или установив его на ., что, однако, приведет к тому, что привязка не обновится, если какой-либо изизменяются соответствующие свойства этого объекта.

Я бы порекомендовал вместо этого использовать MultiBinding, чтобы вы могли указать нужные свойства, и привязка обновится, если какие-либо из них изменятся.(Примеры использования см. В соответствующем разделе MSDN)

0 голосов
/ 27 сентября 2011

MyProperty="{Binding Converter={StaticResource ObjectToDerivedValueConverter}

Это должно сделать это.

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