Postupy: Připojení k metodě

Následující příklad ukazuje, jak vytvořit vazbu na metodu pomocí ObjectDataProvider.

Příklad

V tomto příkladu je třída, TemperatureScale která má metodu ConvertTemp, která přebírá dva parametry (jeden z double a jeden z enum typu TempType) a převede danou hodnotu z jednoho teplotního měřítka na jinou. V následujícím příkladu ObjectDataProvider se používá k vytvoření instance objektu TemperatureScale . Metoda ConvertTemp je volána se dvěma zadanými parametry.

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

Teď, když je metoda k dispozici jako prostředek, můžete vytvořit vazbu k jeho výsledkům. V následujícím příkladu Text jsou vlastnost TextBox a SelectedValue vlastnosti ComboBox vázány na dva parametry metody. To umožňuje uživatelům určit teplotu, ze které se má převést, a měřítko teploty, ze které se má převést. Všimněte si, že BindsDirectlyToSource je nastavena true , protože jsme vázáni na MethodParameters vlastnost ObjectDataProvider instance, a nikoli vlastnosti objektu zabaleného objektem ObjectDataProvider ( TemperatureScale objekt).

Poslední ContentLabel aktualizace, když uživatel upraví obsah TextBox nebo výběr ComboBoxsouboru .

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

Převaděč DoubleToString přebírá dvojitou hodnotu a převede ho na řetězec ve Convert směru (ze zdroje vazby na cíl vazby, což je Text vlastnost) a převede string na doubleConvertBack směr.

Jedná se InvalidationCharacterRule o kontrolu ValidationRule neplatných znaků. Výchozí šablona chyby, což je červené ohraničení kolem TextBox, se zdá upozornit uživatele, když vstupní hodnota není dvojitá hodnota.

Viz také