2012-01-31 105 views
2

我有下面的XAML是用于一些数据绑定到某个图表控件:Xaml - '计算值' - 可以这样做吗?

<vf:DataSeries 
    AxisYType="Secondary" 
    RenderAs="Line" 
    DataSource="{Binding CdTeThicknessList}" 
    XValueType="DateTime" 
    MarkerEnabled="False" 
    Color="Navy" 
    LegendText="Beta CdTe - Std. Dev."> 
    <vf:DataSeries.DataMappings> 
    <vf:DataMapping MemberName="XValue" Path="ReadTime"></vf:DataMapping> 
    <vf:DataMapping MemberName="YValue" Path="BetaThicknessStdDev"></vf:DataMapping> 
    <vf:DataMapping MemberName="Enabled" Path="PointEnabled"></vf:DataMapping> 
    </vf:DataSeries.DataMappings> 
</vf:DataSeries> 

我的问题与设置“已启用”属性来实现。它需要根据“BetaThicknessStdDev”是否包含一个值(True,如果是)来设置为True或False。 “PointEnabled”不是CdTeThicknessList(数据源)的属性,我宁愿不要让它成为一个。根据“BetaThicknessStdDev”是否包含值,XAML中有一种简单的方法将其设置为true?

回答

3

是的,有一种方法。简单,也许不是那么多。通常情况下,你会使用一个转换器来处理这种类型的事情。 (IValueConverter)

你的XAML会是这个样子:

IsEnabled="{Binding Path=BetaThicknessStdDev, Converter={StaticResource ThicknessToVisibilityConverter}}" 

你的转换器会是这个样子:

Public Class ThicknessToVisibilityConverter 
    Implements IValueConverter 

    Public Function Convert(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert 

     If value is Nothing Then 
     Return True 
     Else 
     Return False 
     End If 
    End Function 

    Public Function ConvertBack(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack 
     Return Nothing 
    End Function 
End Class 

你也需要把下面的内容窗口(或用户控件):

<Window.Resources> 
    <local:ThicknessToVisibilityConverter x:Key="ThicknessToVisibilityConverter" /> 
</Window.Resources> 

..其中local定义在您的xaml作为包含自定义转换器的项目的名称空间。

xmlns:local="clr-namespace:MyProject" 
1

您可以将您的Enabled属性绑定到BetaThicknessStdDev并使用自定义值转换器。

请参阅MSDN该怎么做。