방법: 메서드 바인딩

다음 예제에서는 ObjectDataProvider를 사용하여 메서드에 바인딩하는 방법을 보여 줍니다.

예제

이 예에서 TemperatureScaleConvertTemp 메서드가 있는 클래스입니다. 이 메서드에서는 두 개의 매개 변수(double 중 하나와 enum 형식 TempType) 중 하나)를 사용하고 지정된 값을 한 온도 눈금에서 다른 눈금으로 변환합니다. 다음 예제에서 ObjectDataProviderTemperatureScale을 인스턴스화하는 데 사용합니다. 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>

이제 메서드를 리소스로 사용할 수 있으므로, 해당 결과에 바인딩할 수 있습니다. 다음 예제에서 TextBoxText 속성과 ComboBoxSelectedValue는 메서드의 두 매개 변수에 바인딩됩니다. 그러면 변환될 대상 온도와 변환될 소스 온도 눈금을 지정할 수 있습니다. ObjectDataProvider 인스턴스의 MethodParameters 속성은 바인딩하지만 ObjectDataProvider에서 래핑하는 개체(TemperatureScale 개체)의 속성은 바인딩하지 않으므로, BindsDirectlyToSourcetrue로 설정합니다.

마지막 LabelContent는 사용자가 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 속성)으로)의 문자열로 바꾼 다음 stringConvertBack 방향의 double로 변환합니다.

InvalidationCharacterRule은 유효하지 않은 문자를 확인하는 ValidationRule입니다. TextBox 주위에 빨간색 테두리인 기본 오류 템플릿이 표시되어 입력 값이 double 값이 아님을 알립니다.

참고 항목