绑定到ItemsSource的实例

时间:2011-09-27 15:01:08

标签: c# wpf xaml data-binding converter

我在WPF用户控件上有一个定义为

的ListBox
<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>

此处的绑定表示它将使用AutoResearchProxy实例的ExchangePrice属性,如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 :(得分:0)

MyProperty="{Binding Converter={StaticResource ObjectToDerivedValueConverter}

应该这样做。

答案 1 :(得分:0)

您可以通过不指定Path或将其设置为Binding将整个datacontext对象传递给.,但是如果有任何约束,则会导致绑定不更新该对象的相关属性发生了变化。

我建议您使用MultiBinding,这样您就可以定位必要的属性,如果其中任何一个更改,绑定将更新。 (有关用法示例,请参阅MSDN上的相应部分)