Bagikan melalui


Cara: Mengikat ke Metode

Contoh berikut menunjukkan cara mengikat ke metode menggunakan ObjectDataProvider.

Contoh

Dalam contoh ini, TemperatureScale adalah kelas yang memiliki metode ConvertTemp, yang mengambil dua parameter (salah satu dari double dan salah satu jenis enum TempType) dan mengonversi nilai yang diberikan dari satu skala suhu ke skala suhu lainnya. Dalam contoh berikut, digunakan ObjectDataProvider untuk membuat instans TemperatureScale objek. Metode ConvertTemp ini dipanggil dengan dua parameter yang ditentukan.

<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>

Sekarang setelah metode tersedia sebagai sumber daya, Anda dapat mengikat hasilnya. Dalam contoh berikut, Text properti dan TextBox SelectedValue dari ComboBox terikat ke dua parameter metode. Ini memungkinkan pengguna untuk menentukan suhu yang akan dikonversi dan skala suhu yang akan dikonversi. Perhatikan bahwa BindsDirectlyToSource diatur ke true karena kita mengikat ke MethodParameters properti ObjectDataProvider instans dan bukan properti objek yang dibungkus oleh ObjectDataProvider ( TemperatureScale objek).

Content Dari pembaruan terakhir Label ketika pengguna memodifikasi konten TextBox atau pilihan 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"/>

Pengonversi DoubleToString mengambil ganda dan mengubahnya menjadi string ke Convert arah (dari sumber pengikatan ke target pengikatan, yang merupakan Text properti) dan mengonversi menjadi string ke double ConvertBack arah.

InvalidCharacterRule adalah ValidationRule yang memeriksa karakter yang tidak valid. Templat kesalahan default, yang merupakan batas merah di TextBoxsekitar , tampaknya memberi tahu pengguna ketika nilai input bukan nilai ganda.

Lihat juga