2012-01-31 150 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該怎麼做。