Sdílet prostřednictvím


Postupy: Vytvoření vazby k metodě

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

Příklad

V tomto příkladu je TemperatureScale třída, 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 jiný. V následujícím příkladu se ObjectDataProvider používá k vytvoření instance TemperatureScale objektu. Metoda ConvertTemp se volá 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 je vlastnost Text objektu TextBox a SelectedValue objektu ComboBox svázána s dvěma parametry metody. To umožňuje uživatelům zadat teplotu, kterou chtějí převést, a měřítko teploty, ze kterého se má převést. Všimněte si, že BindsDirectlyToSource je nastavena na true, protože jsme vázáni na vlastnost MethodParameters instance ObjectDataProvider a ne vlastnosti objektu zabaleného ObjectDataProvider (objekt TemperatureScale).

Content posledního Label se aktualizuje, když uživatel upraví obsah TextBox, nebo výběr 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"/>

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

InvalidCharacterRule je ValidationRule, které kontroluje neplatné znaky. Výchozí šablona chyby, což je červené ohraničení kolem TextBox, se zdá upozornit uživatele, když vstupní hodnota není dvojitá hodnota.

Viz také