Практическое руководство. Создание привязки к методу
В следующем примере показано, как для привязки к методу с помощью ObjectDataProvider.
Пример
В этом примере TemperatureScale
— это класс, у которого есть метод ConvertTemp
, принимающий два параметра (один из double
и один из enum
типа TempType)
) и преобразующий данное значение из одной температурной шкалы в другую. В следующем примере ObjectDataProvider используется для создания экземпляра TemperatureScale
объекта. Метод ConvertTemp
вызывается с двумя заданными параметрами.
<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>
Теперь, когда метод доступен как ресурс, вы можете привязывать к его результатам. В следующем примере Text свойство TextBox и SelectedValue из ComboBox связанных с двумя параметрами метода. Таким образом, пользователи могут указывать исходную и целевую температурную шкалу. Обратите внимание, что BindsDirectlyToSource присваивается true
так, как выполняется привязка к MethodParameters свойство ObjectDataProvider экземпляр и не к свойствам объект, инкапсулированный с ObjectDataProvider ( TemperatureScale
объекта).
Content Последнего Label обновления, когда пользователь изменяет содержимое TextBox или выбор 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"/>
Преобразователь DoubleToString
принимает значение типа double и преобразует его в строку в Convert направлении (от источника привязки к цели привязки, который является Text свойства) и преобразует string
для double
в ConvertBack направление.
InvalidationCharacterRule
Является ValidationRule , проверяет наличие недопустимых символов. Шаблон ошибки по умолчанию, который представляет собой красную границу вокруг TextBox, появляется для уведомления пользователей, если входное значение не является значением double.