Практическое руководство. Создание привязки к методу
В следующем примере показано, как выполнить привязку метода, используя 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, проверяющее недопустимые символы. Если входное значение не является числом типа double, для уведомления пользователей появляется шаблон ошибки по умолчанию, представляющий собой красную границу, вокруг TextBox.
См. также
.NET Desktop feedback
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по