操作說明:繫結至方法
下列範例示範如何使用 ObjectDataProvider 繫結至方法。
範例
在此範例中,TemperatureScale
是一個包含方法 ConvertTemp
的類別,它接受兩個參數 (一個是 double
類型,一個是 enum
類型 TempType)
,並將指定的值從一個溫度單位轉換為另一個溫度單位。 在下列範例中,會使用 ObjectDataProvider 來具現化 TemperatureScale
物件。 ConvertTemp
方法是使用兩個指定的參數呼叫。
<Window.Resources>
<ObjectDataProvider ObjectType="{x:Type local:TemperatureScale}"
MethodName="ConvertTemp" x:Key="convertTemp">
<ObjectDataProvider.MethodParameters>
<system:Double>0</system:Double>
<local:TempType>Celsius</local:TempType>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<local:DoubleToString x:Key="doubleToString" />
</Window.Resources>
現在,方法已經成為資源,就可以繫結至其結果。 在下列範例中,TextBox 的 Text 屬性和 ComboBox 的 SelectedValue 會繫結至方法的兩個參數。 這可讓使用者指定要轉換的溫度及轉換前的溫度單位。 請注意,BindsDirectlyToSource 會設定為 true
,因為我們繫結至 ObjectDataProvider 執行個體的 MethodParameters 屬性,而不是由 ObjectDataProvider 包裝的物件屬性 (TemperatureScale
物件)。
當使用者修改 TextBox 的內容或選取 ComboBox 時,最後 Label 的 Content 會更新。
<Label Grid.Row="1" HorizontalAlignment="Right">Enter the degree to convert:</Label>
<TextBox Grid.Row="1" Grid.Column="1" Name="tb">
<TextBox.Text>
<Binding Source="{StaticResource convertTemp}" Path="MethodParameters[0]"
BindsDirectlyToSource="true" UpdateSourceTrigger="PropertyChanged"
Converter="{StaticResource doubleToString}">
<Binding.ValidationRules>
<local:InvalidCharacterRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<ComboBox Grid.Row="1" Grid.Column="2"
SelectedValue="{Binding Source={StaticResource convertTemp},
Path=MethodParameters[1], BindsDirectlyToSource=true}">
<local:TempType>Celsius</local:TempType>
<local:TempType>Fahrenheit</local:TempType>
</ComboBox>
<Label Grid.Row="2" HorizontalAlignment="Right">Result:</Label>
<Label Content="{Binding Source={StaticResource convertTemp}}"
Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2"/>
轉換器 DoubleToString
會採用雙精度浮點數,並將它轉換成 Convert 方向的字串 (從繫結來源到繫結目標,也就是 Text 屬性),並將 string
轉換成 ConvertBack 方向的 double
。
InvalidCharacterRule
是檢查無效字元的 ValidationRule。 當輸入值不是雙精度浮點數值時,會顯示預設錯誤範本 (即 TextBox 周圍的紅色框線) 以通知使用者。