共用方式為


操作說明:繫結至方法

下列範例示範如何使用 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>

現在,方法已經成為資源,就可以繫結至其結果。 在下列範例中,TextBoxText 屬性和 ComboBoxSelectedValue 會繫結至方法的兩個參數。 這可讓使用者指定要轉換的溫度及轉換前的溫度單位。 請注意,BindsDirectlyToSource 會設定為 true,因為我們繫結至 ObjectDataProvider 執行個體的 MethodParameters 屬性,而不是由 ObjectDataProvider 包裝的物件屬性 (TemperatureScale 物件)。

當使用者修改 TextBox 的內容或選取 ComboBox 時,最後 LabelContent 會更新。

<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 周圍的紅色框線) 以通知使用者。

另請參閱