Jak połączyć się z metodą
W poniższym przykładzie pokazano, jak powiązać metodę przy użyciu ObjectDataProvider.
Przykład
W tym przykładzie TemperatureScale
jest klasą, która ma metodę ConvertTemp
, która przyjmuje dwa parametry (jeden z double
i jeden z enum
typu TempType)
i konwertuje daną wartość z jednej skali temperatury na inną. W poniższym przykładzie ObjectDataProvider służy do utworzenia obiektu TemperatureScale
. Metoda ConvertTemp
jest wywoływana z dwoma określonymi parametrami.
<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>
Teraz, gdy metoda jest dostępna jako zasób, możesz powiązać z jej wynikami. W poniższym przykładzie właściwość Text elementu TextBox i elementu SelectedValueComboBox są powiązane z dwoma parametrami metody. Dzięki temu użytkownicy mogą określić temperaturę do konwersji i skalę temperatury, z której ma być konwertowana. Należy pamiętać, że BindsDirectlyToSource jest ustawiona na true
, ponieważ wiążemy się z właściwością MethodParameters wystąpienia ObjectDataProvider, a nie właściwości obiektu opakowanego przez ObjectDataProvider (obiekt TemperatureScale
).
Content ostatniej Label jest aktualizowana, gdy użytkownik modyfikuje zawartość TextBox lub wybó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"/>
Konwerter DoubleToString
przyjmuje wartość zmiennoprzecinkową i zamienia ją na ciąg znaków w kierunku Convert (od źródła powiązania do docelowego obiektu, który jest właściwością Text) oraz konwertuje string
na double
w kierunku ConvertBack.
InvalidCharacterRule
to ValidationRule, który sprawdza, czy występują nieprawidłowe znaki. Domyślny szablon błędu, który jest czerwonym obramowaniem wokół TextBox, wydaje się powiadamiać użytkowników, gdy wartość wejściowa nie jest podwójną wartością.
Zobacz też
.NET Desktop feedback