Dela via


Så här gör du: Binda till en metod

I följande exempel visas hur du binder till en metod med hjälp av ObjectDataProvider.

Exempel

I det här exemplet är TemperatureScale en klass som har en metod ConvertTemp, som tar två parametrar (en av double och en av enum typ TempType) och konverterar det angivna värdet från en temperaturskala till en annan. I följande exempel används en ObjectDataProvider för att instansiera det TemperatureScale objektet. Metoden ConvertTemp anropas med två angivna parametrar.

<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>

Nu när metoden är tillgänglig som en resurs kan du binda till dess resultat. I följande exempel är egenskapen Text för TextBox och SelectedValue för ComboBox bundna till metodens två parametrar. På så sätt kan användarna ange vilken temperatur som ska konverteras och vilken temperaturskala som ska konverteras från. Observera att BindsDirectlyToSource är inställt på true eftersom vi binder till egenskapen MethodParameters för ObjectDataProvider-instansen och inte egenskaperna för objektet som omsluts av ObjectDataProvider (TemperatureScale-objektet).

Content för den senaste Label uppdateras när användaren ändrar innehållet i TextBox eller valet av ComboBox.

<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"/>

Konverteraren DoubleToString tar en dubbel och omvandlar den till en sträng i Convert riktning (från bindningskällan till bindningsmålet, som är egenskapen Text) och konverterar en string till en double i ConvertBack riktning.

InvalidCharacterRule är en ValidationRule som söker efter ogiltiga tecken. Standardfelmallen, som är en röd kantlinje runt TextBox, verkar meddela användarna när indatavärdet inte är ett dubbelt värde.

Se även