绑定到对象而不是属性

时间:2012-07-09 14:42:12

标签: wpf data-binding object properties

在使用转换器时,我想绑定到整个对象并将其发送到转换器以使用,而不是绑定到每个单独的属性,所以我可以这样做:

Order thisOrder = (Order)values[0];

(注意,它是一个多绑定,除了thisOrder对象之外还会发送其他值。现在Order类实现了INotifyPropertyChanged接口,并在其任何属性发生更改时引发了相应的事件。转换器需要访问多个属性虽然它实际上只需要重新运行其中一个属性的更改。是否有任何方法可以绑定到整个对象,以便如果任何属性更改,转换器将再次进行评估,或仅绑定到一个属性,但是对象的其余部分也可用作转换器的参数吗?

  

示例详情:   订单包含以下字段:

     
      
  • ID
  •   
  • MarketPrice
  •   
  • 名称
  •   
     

当MarketPrice发生变化时,转换器需要重新计算   ID和MarketPrice。   目前,绑定应用于xamDataGrid的DataRecordCellArea,如下所示:

<MultiBinding Converter="{StaticResource MarketPositionToBrushConverter}">
     <Binding RelativeSource="{RelativeSource Self}" Path="Record.DataItem"/>
...
</MultiBinding>

1 个答案:

答案 0 :(得分:0)

据我所知,目前还没有清洁解决方案。我建议你添加两个绑定,一个绑定到Order对象,这样你就可以访问所有值,另一个绑定到MarketPrice,这样如果该属性发生变化,绑定就会更新。然后,您可以通过第一个绑定访问对象和所有属性,并获得相应的更新。

这是另一种非常黑客的方法,您可以在拥有PropertyChanged实例的类中订阅Order,然后在Order实例属性发出更改通知时实例中的MarketPrice发生了变化。我会避免这样做,但它会让你摆脱第二次绑定。