방법: 메서드 바인딩

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

예제

이 예에서 TemperatureScaleConvertTemp 메서드가 있는 클래스입니다. 이 메서드에서는 두 개의 매개 변수(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>

이제 메서드를 리소스로 사용할 수 있으므로, 해당 결과에 바인딩할 수 있습니다. 다음 예제에서는 의 TextTextBox 속성과 의 가 SelectedValueComboBox 메서드의 두 매개 변수에 바인딩됩니다. 그러면 변환될 대상 온도와 변환될 소스 온도 눈금을 지정할 수 있습니다. 로 BindsDirectlyToSourcetrue 설정됩니다. 인스턴스의 속성에 바인딩하고 MethodParametersObjectDataProviderObjectDataProvider (개체)로 래핑된 개체의 속성이 아니기 TemperatureScale 때문입니다.

사용자가 의 콘텐츠 또는 선택 항목을 Content 수정할 때 마지막으로 LabelTextBox 업데이트하는 의 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 를 방향으로 으로 doubleConvertBack 변환합니다.

InvalidationCharacterRule는 잘못된 문자를 확인하는 ValidationRule 입니다. 의 빨간색 테두리인 기본 오류 템플릿은 TextBox 입력 값이 double 값이 아닌 경우 사용자에게 알리는 것으로 나타납니다.

참조