Share via


BindingGroup Kelas

Definisi

Berisi kumpulan pengikatan dan ValidationRule objek yang digunakan untuk memvalidasi objek.

public ref class BindingGroup : System::Windows::DependencyObject
public class BindingGroup : System.Windows.DependencyObject
type BindingGroup = class
    inherit DependencyObject
Public Class BindingGroup
Inherits DependencyObject
Warisan

Contoh

Contoh berikut membuat aplikasi yang meminta pengguna untuk memasukkan deskripsi dan harga item dan tanggal penawaran kedaluwarsa. Aplikasi menampilkan informasi saat ini untuk item di bawah formulir. Pengguna dapat mengirimkan atau membatalkan perubahan.

Aplikasi melakukan hal berikut untuk mencapai perilaku ini.

  • BindingGroup Membuat dan menambahkannya akar StackPanel saat membuat antarmuka pengguna (UI) aplikasi.

  • BeginEditPanggilan , CommitEdit, dan CancelEdit dalam logika aplikasi untuk mengaktifkan perubahan gulung balik.

  • TryGetValue Panggilan dalam Validate metode untuk mendapatkan input pengguna lalu memeriksa apakah item lebih dari 100 dolar tersedia setidaknya selama tujuh hari.

Contoh berikut membuat antarmuka pengguna (UI) aplikasi. Akar StackPanel memiliki BindingGroup yang berisi ValidationRule yang memvalidasi item, seperti yang dijelaskan sebelumnya. Objek pengikatan pada Price properti dan OfferExpires properti menjadi bagian BindingGroup dari dan setiap pengikatan memiliki ValidationRule untuk memastikan bahwa harga dan tanggal, masing-masing, adalah nilai yang valid. Aturan validasi untuk properti individual berjalan sebelum ValidationRule pada BindingGroup.

<StackPanel Name="stackPanel1"  Margin="10" Width="250"
            Loaded="stackPanel1_Loaded"
            Validation.Error="ItemError">

  <StackPanel.Resources>
    <Style TargetType="HeaderedContentControl">
      <Setter Property="Margin" Value="2"/>
      <Setter Property="Focusable" Value="False"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="HeaderedContentControl">
            <DockPanel LastChildFill="False">
              <ContentPresenter ContentSource="Header" DockPanel.Dock="Left" Focusable="False" VerticalAlignment="Center"/>
              <ContentPresenter ContentSource="Content" Margin="5,0,0,0" DockPanel.Dock="Right" VerticalAlignment="Center"/>
            </DockPanel>

          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>

    <Style TargetType="Button">
      <Setter Property="Width" Value="100"/>
      <Setter Property="Margin" Value="10,15,15,15"/>

    </Style>

  </StackPanel.Resources>
  
  <StackPanel.BindingGroup>
    <BindingGroup NotifyOnValidationError="True">
      <BindingGroup.ValidationRules>
        <src:ValidateDateAndPrice ValidationStep="ConvertedProposedValue" />
      </BindingGroup.ValidationRules>
    </BindingGroup>
  </StackPanel.BindingGroup>
  
  <TextBlock FontSize="14" Text="Enter an item for sale"/>
  <HeaderedContentControl Header="Description">
    <TextBox Width="150" Text="{Binding Path=Description, Mode=TwoWay}"/>
  </HeaderedContentControl>
  <HeaderedContentControl Header="Price">
    <TextBox Name="priceField"  Width="150">
      <TextBox.Text>
        <Binding Path="Price" Mode="TwoWay" >
          <Binding.ValidationRules>
            <src:PriceIsAPositiveNumber/>
          </Binding.ValidationRules>
        </Binding>
      </TextBox.Text>
    </TextBox>
  </HeaderedContentControl>
  <HeaderedContentControl Header="Date Offer Ends">
    <TextBox Name="dateField" Width="150" >
      <TextBox.Text>
        <Binding Path="OfferExpires" StringFormat="d" >
          <Binding.ValidationRules>
            <src:FutureDateRule/>
          </Binding.ValidationRules>
        </Binding>
      </TextBox.Text>
    </TextBox>
  </HeaderedContentControl>
  <StackPanel Orientation="Horizontal">
    <Button IsDefault="True" Click="Submit_Click">_Submit</Button>
    <Button IsCancel="True" Click="Cancel_Click">_Cancel</Button>
  </StackPanel>
  <HeaderedContentControl Header="Description">
    <TextBlock Width="150" Text="{Binding Path=Description}"/>
  </HeaderedContentControl>
  <HeaderedContentControl Header="Price">
    <TextBlock Width="150" Text="{Binding Path=Price, StringFormat=c}"/>
  </HeaderedContentControl>
  <HeaderedContentControl Header="Date Offer Ends">
    <TextBlock Width="150" Text="{Binding Path=OfferExpires, StringFormat=d}"/>
  </HeaderedContentControl>
</StackPanel>

Contoh berikut menunjukkan penanganan aktivitas untuk aplikasi. Ketika pengguna mengklik tombol Kirim, aplikasi memanggil CommitEdit untuk menjalankan masing-masing ValidationRule yang terkait dengan BindingGroup. Jika masing-masing ValidationRule berhasil, CommitEdit simpan nilai ke objek dan akhiri transaksi edit. Jika CommitEdit berhasil, aplikasi memulai transaksi edit lain. ValidationRule Ketika gagal, Validation.Error peristiwa terjadi karena aplikasi diatur NotifyOnValidationError ke true pada BindingGroup (dalam contoh sebelumnya). ItemErrorValidation.Error menangani peristiwa dan menampilkan informasi tentang kesalahan validasi kepada pengguna. Contoh ini juga menangani Loaded peristiwa untuk StackPanel acara dan Click untuk tombol Batalkan .


private void Submit_Click(object sender, RoutedEventArgs e)
{
    if (stackPanel1.BindingGroup.CommitEdit())
    {
        MessageBox.Show("Item submitted");
        stackPanel1.BindingGroup.BeginEdit();
    }
}

// This event occurs when a ValidationRule in the BindingGroup
// or in a Binding fails.
private void ItemError(object sender, ValidationErrorEventArgs e)
{
    if (e.Action == ValidationErrorEventAction.Added)
    {
        MessageBox.Show(e.Error.ErrorContent.ToString());
    }
}

void stackPanel1_Loaded(object sender, RoutedEventArgs e)
{
    // Set the DataContext to a PurchaseItem object.
    // The BindingGroup and Binding objects use this as
    // the source.
    stackPanel1.DataContext = new PurchaseItem();

    // Begin an edit transaction that enables
    // the object to accept or roll back changes.
    stackPanel1.BindingGroup.BeginEdit();
}

private void Cancel_Click(object sender, RoutedEventArgs e)
{
    // Cancel the pending changes and begin a new edit transaction.
    stackPanel1.BindingGroup.CancelEdit();
    stackPanel1.BindingGroup.BeginEdit();
}

Private Sub Submit_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If stackPanel1.BindingGroup.CommitEdit() Then
        MessageBox.Show("Item submitted")
        stackPanel1.BindingGroup.BeginEdit()
    End If


End Sub

' This event occurs when a ValidationRule in the BindingGroup
' or in a Binding fails.
Private Sub ItemError(ByVal sender As Object, ByVal e As ValidationErrorEventArgs)
    If e.Action = ValidationErrorEventAction.Added Then
        MessageBox.Show(e.Error.ErrorContent.ToString())

    End If
End Sub

Private Sub stackPanel1_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
    ' Set the DataContext to a PurchaseItem object.
    ' The BindingGroup and Binding objects use this as
    ' the source.
    stackPanel1.DataContext = New PurchaseItem()

    ' Begin an edit transaction that enables
    ' the object to accept or roll back changes.
    stackPanel1.BindingGroup.BeginEdit()
End Sub

Private Sub Cancel_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    ' Cancel the pending changes and begin a new edit transaction.
    stackPanel1.BindingGroup.CancelEdit()
    stackPanel1.BindingGroup.BeginEdit()
End Sub

Contoh berikut menunjukkan kustom ValidationRuleValidateDateAndPrice, yang ditambahkan ke BindingGroup dalam contoh pertama. ValidationRule menggunakan BindingGroup dalam metodenya Validate untuk mendapatkan nilai yang dimasukkan pengguna ke dalam formulir, dan memeriksa apakah item lebih dari 100 dolar, item akan tersedia setidaknya selama tujuh hari.

public class ValidateDateAndPrice : ValidationRule
{
    // Ensure that an item over $100 is available for at least 7 days.
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        BindingGroup bg = value as BindingGroup;

        // Get the source object.
        PurchaseItem item = bg.Items[0] as PurchaseItem;
        
        object doubleValue;
        object dateTimeValue;

        // Get the proposed values for Price and OfferExpires.
        bool priceResult = bg.TryGetValue(item, "Price", out doubleValue);
        bool dateResult = bg.TryGetValue(item, "OfferExpires", out dateTimeValue);

        if (!priceResult || !dateResult)
        {
            return new ValidationResult(false, "Properties not found");
        }

        double price = (double)doubleValue;
        DateTime offerExpires = (DateTime)dateTimeValue;

        // Check that an item over $100 is available for at least 7 days.
        if (price > 100)
        {
            if (offerExpires < DateTime.Today + new TimeSpan(7, 0, 0, 0))
            {
                return new ValidationResult(false, "Items over $100 must be available for at least 7 days.");
            }
        }

        return ValidationResult.ValidResult;
    }
}
Public Class ValidateDateAndPrice
    Inherits ValidationRule
    ' Ensure that an item over $100 is available for at least 7 days.
    Public Overrides Function Validate(ByVal value As Object, ByVal cultureInfo As CultureInfo) As ValidationResult
        Dim bg As BindingGroup = TryCast(value, BindingGroup)

        ' Get the source object.
        Dim item As PurchaseItem = TryCast(bg.Items(0), PurchaseItem)

        Dim doubleValue As Object = Nothing
        Dim dateTimeValue As Object = Nothing

        ' Get the proposed values for Price and OfferExpires.
        Dim priceResult As Boolean = bg.TryGetValue(item, "Price", doubleValue)
        Dim dateResult As Boolean = bg.TryGetValue(item, "OfferExpires", dateTimeValue)

        If (Not priceResult) OrElse (Not dateResult) Then
            Return New ValidationResult(False, "Properties not found")
        End If

        Dim price As Double = CDbl(doubleValue)
        Dim offerExpires As Date = CDate(dateTimeValue)

        ' Check that an item over $100 is available for at least 7 days.
        If price > 100 Then
            If offerExpires < Date.Today + New TimeSpan(7, 0, 0, 0) Then
                Return New ValidationResult(False, "Items over $100 must be available for at least 7 days.")
            End If
        End If

        Return ValidationResult.ValidResult

    End Function
End Class

Keterangan

membuat BindingGroup hubungan antara beberapa pengikatan, yang dapat divalidasi dan diperbarui bersama-sama. Misalnya, aplikasi meminta pengguna untuk memasukkan alamat. Aplikasi kemudian mengisi objek jenis Address, yang memiliki properti, , Street, CityZipCode, dan Country, dengan nilai yang disediakan pengguna. Aplikasi ini memiliki panel yang berisi empat TextBox kontrol, yang masing-masing terikat data ke salah satu properti objek. Anda dapat menggunakan ValidationRule dalam BindingGroup untuk memvalidasi Address objek. Jika pengikatan berpartisipasi dalam hal yang sama BindingGroup, Anda dapat memastikan bahwa kode pos valid untuk negara/wilayah alamat.

Anda mengatur BindingGroup properti pada FrameworkElement atau FrameworkContentElement. Elemen turunan BindingGroup mewarisi dari elemen induknya, sama seperti properti lain yang dapat diwariskan. Pengikatan pada elemen keturunan ditambahkan ke BindingGroup jika salah satu situasi berikut terjadi:

Dalam contoh alamat, misalkan dari DataContextPanel diatur ke objek jenis Address. Pengikatan untuk masing-masing TextBox ditambahkan ke BindingGroup panel.

Anda menambahkan ValidationRule objek ke BindingGroup. BindingGroup diteruskan sebagai parameter pertama metode Validate saat ValidationRule dijalankan. Anda dapat menggunakan TryGetValue metode atau GetValue(Object, String) untuk mendapatkan nilai objek yang BindingGroup diusulkan, dan Items properti untuk mendapatkan sumber pengikatan.

Memperbarui BindingGroup sumber pengikatan secara bersamaan alih-alih setiap pengikatan diperbarui secara terpisah. Ketika Anda memanggil salah satu metode untuk memvalidasi data (ValidateWithoutUpdate, , atau CommitEdit), pengikatan untuk masing-masing TextBox dalam contoh divalidasi dan berpotensi UpdateSourcesdiperbarui. Ketika pengikatan adalah bagian BindingGroupdari , sumber pengikatan tidak diperbarui sampai Anda memanggil UpdateSources atau CommitEdit pada BindingGroup, kecuali Anda secara eksplisit mengatur UpdateSourceTrigger properti.

Konstruktor

BindingGroup()

Menginisialisasi instans baru kelas BindingGroup.

Properti

BindingExpressions

Mendapatkan kumpulan BindingExpression objek yang berisi informasi untuk setiap Pengikatan di BindingGroup.

CanRestoreValues

Mendapatkan apakah setiap sumber dalam pengikatan dapat membuang perubahan yang tertunda dan memulihkan nilai asli.

DependencyObjectType

Mendapatkan yang membungkus jenis CLR instans DependencyObjectType ini.

(Diperoleh dari DependencyObject)
Dispatcher

Mendapatkan ini DispatcherDispatcherObject dikaitkan dengan.

(Diperoleh dari DispatcherObject)
HasValidationError

Mendapatkan nilai yang menunjukkan apakah BindingGroup memiliki aturan validasi yang gagal.

IsDirty

Mendapatkan atau menetapkan nilai yang menunjukkan apakah BindingGroup berisi nilai yang diusulkan yang belum ditulis ke sumbernya.

IsSealed

Mendapatkan nilai yang menunjukkan apakah instans ini saat ini disegel (baca-saja).

(Diperoleh dari DependencyObject)
Items

Mendapatkan sumber yang digunakan oleh objek Pengikatan di BindingGroup.

Name

Mendapatkan atau mengatur nama yang mengidentifikasi BindingGroup, yang dapat digunakan untuk menyertakan dan mengecualikan objek Pengikatan di BindingGroup.

NotifyOnValidationError

Mendapatkan atau mengatur apakah Error peristiwa terjadi saat status ValidationRule perubahan.

Owner

Mendapatkan objek tempat ini BindingGroup ditetapkan.

SharesProposedValues

Mendapatkan atau menetapkan nilai yang menunjukkan apakah BindingGroup menggunakan kembali nilai target yang belum diterapkan ke sumbernya.

ValidatesOnNotifyDataError

Mendapatkan atau menetapkan nilai yang menunjukkan apakah akan menyertakan NotifyDataErrorValidationRule.

ValidationErrors

Mendapatkan kumpulan ValidationError objek yang menyebabkan tidak BindingGroup valid.

ValidationRules

Mendapatkan kumpulan ValidationRule objek yang memvalidasi objek sumber di BindingGroup.

Metode

BeginEdit()

Memulai transaksi edit pada sumber di BindingGroup.

CancelEdit()

Mengakhiri transaksi edit dan membuang perubahan yang tertunda.

CheckAccess()

Menentukan apakah utas panggilan memiliki akses ke ini DispatcherObject.

(Diperoleh dari DispatcherObject)
ClearValue(DependencyProperty)

Menghapus nilai lokal properti. Properti yang akan dibersihkan ditentukan oleh DependencyProperty pengidentifikasi.

(Diperoleh dari DependencyObject)
ClearValue(DependencyPropertyKey)

Menghapus nilai lokal properti baca-saja. Properti yang akan dibersihkan ditentukan oleh DependencyPropertyKey.

(Diperoleh dari DependencyObject)
CoerceValue(DependencyProperty)

Memaksakan nilai properti dependensi yang ditentukan. Ini dicapai dengan memanggil fungsi apa pun CoerceValueCallback yang ditentukan dalam metadata properti untuk properti dependensi seperti yang ada pada panggilan DependencyObject.

(Diperoleh dari DependencyObject)
CommitEdit()

Menjalankan semua ValidationRule objek dan memperbarui sumber pengikatan jika semua aturan validasi berhasil.

Equals(Object)

Menentukan apakah yang disediakan DependencyObject setara dengan saat ini DependencyObject.

(Diperoleh dari DependencyObject)
GetHashCode()

Mendapatkan kode hash untuk ini DependencyObject.

(Diperoleh dari DependencyObject)
GetLocalValueEnumerator()

Membuat enumerator khusus untuk menentukan properti dependensi mana yang telah mengatur nilai secara lokal pada ini DependencyObject.

(Diperoleh dari DependencyObject)
GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
GetValue(DependencyProperty)

Mengembalikan nilai efektif properti dependensi saat ini pada instans ini dari DependencyObject.

(Diperoleh dari DependencyObject)
GetValue(Object, String)

Mengembalikan nilai yang diusulkan untuk properti dan item yang ditentukan.

InvalidateProperty(DependencyProperty)

Mengevaluasi ulang nilai efektif untuk properti dependensi yang ditentukan.

(Diperoleh dari DependencyObject)
MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Dipanggil setiap kali nilai efektif dari properti dependensi apa pun pada ini DependencyObject telah diperbarui. Properti dependensi tertentu yang berubah dilaporkan dalam data peristiwa.

(Diperoleh dari DependencyObject)
ReadLocalValue(DependencyProperty)

Mengembalikan nilai lokal properti dependensi, jika ada.

(Diperoleh dari DependencyObject)
SetCurrentValue(DependencyProperty, Object)

Mengatur nilai properti dependensi tanpa mengubah sumber nilainya.

(Diperoleh dari DependencyObject)
SetValue(DependencyProperty, Object)

Mengatur nilai lokal properti dependensi, yang ditentukan oleh pengidentifikasi properti dependensinya.

(Diperoleh dari DependencyObject)
SetValue(DependencyPropertyKey, Object)

Mengatur nilai lokal properti dependensi baca-saja, yang ditentukan oleh DependencyPropertyKey pengidentifikasi properti dependensi.

(Diperoleh dari DependencyObject)
ShouldSerializeProperty(DependencyProperty)

Mengembalikan nilai yang menunjukkan apakah proses serialisasi harus membuat serialisasi nilai untuk properti dependensi yang disediakan.

(Diperoleh dari DependencyObject)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)
TryGetValue(Object, String, Object)

Mencoba untuk mendapatkan nilai yang diusulkan untuk properti dan item yang ditentukan.

UpdateSources()

Menjalankan pengonversi pada pengikatan dan ValidationRule objek yang memiliki ValidationStep properti yang diatur ke RawProposedValue, ConvertedProposedValue, atau UpdatedValue dan menyimpan nilai target ke objek sumber jika semua aturan validasi berhasil.

ValidateWithoutUpdate()

Menjalankan pengonversi pada pengikatan dan ValidationRule objek yang memiliki properti yang ValidationStep diatur ke RawProposedValue atau ConvertedProposedValue.

VerifyAccess()

Memberlakukan bahwa utas panggilan memiliki akses ke ini DispatcherObject.

(Diperoleh dari DispatcherObject)

Berlaku untuk