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é
- Návody
- Připojit k výčtu
.NET Desktop feedback