방법: 메서드 바인딩
다음 예제에서는 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>
이제 메서드를 리소스로 사용할 수 있으므로, 해당 결과에 바인딩할 수 있습니다. 다음 예제에서 TextBox의 Text 속성과 ComboBox의 SelectedValue는 메서드의 두 매개 변수에 바인딩됩니다. 그러면 변환될 대상 온도와 변환될 소스 온도 눈금을 지정할 수 있습니다. ObjectDataProvider 인스턴스의 MethodParameters 속성은 바인딩하지만 ObjectDataProvider에서 래핑하는 개체(TemperatureScale
개체)의 속성은 바인딩하지 않으므로, BindsDirectlyToSource는 true
로 설정합니다.
마지막 Label의 Content는 사용자가 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
을 ConvertBack 방향의 double
로 변환합니다.
InvalidCharacterRule
은 유효하지 않은 문자를 확인하는 ValidationRule입니다. TextBox 주위에 빨간색 테두리인 기본 오류 템플릿이 표시되어 입력 값이 double 값이 아님을 알립니다.
참고 항목
.NET Desktop feedback