Bagikan melalui


BindingGroup Kelas

Definisi

Berisi kumpulan pengikatan dan objek ValidationRule 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.

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

  • Panggilan BeginEdit, CommitEdit, dan CancelEdit dalam logika aplikasi untuk mengaktifkan perubahan rolling back.

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

Contoh berikut membuat antarmuka pengguna (UI) aplikasi. StackPanel akar memiliki BindingGroup yang berisi ValidationRule yang memvalidasi item, seperti yang dijelaskan sebelumnya. Objek pengikatan pada properti Price dan properti OfferExpires menjadi bagian dari BindingGroup 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 setiap ValidationRule yang terkait dengan BindingGroup. Jika setiap ValidationRule berhasil, CommitEdit menyimpan nilai ke objek dan mengakhiri transaksi edit. Jika CommitEdit berhasil, aplikasi memulai transaksi edit lain. Ketika ValidationRule gagal, peristiwa Validation.Error terjadi karena aplikasi mengatur NotifyOnValidationError ke true pada BindingGroup (dalam contoh sebelumnya). ItemError menangani peristiwa Validation.Error dan menampilkan informasi tentang kesalahan validasi kepada pengguna. Contoh ini juga menangani peristiwa untuk dan peristiwa untuk tombol Pembatalan .


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 ValidationRuleValidateDateAndPricekustom , yang ditambahkan ke BindingGroup dalam contoh pertama. ValidationRule menggunakan BindingGroup dalam metode 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

BindingGroup membuat 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, City, ZipCode, dan Country, dengan nilai yang disediakan pengguna. Aplikasi ini memiliki panel yang berisi empat kontrol TextBox, yang masing-masing terikat data ke salah satu properti objek. Anda dapat menggunakan ValidationRule dalam BindingGroup untuk memvalidasi objek Address. Jika pengikatan berpartisipasi dalam BindingGroupyang sama, Anda dapat memastikan bahwa kode pos valid untuk negara/wilayah alamat.

Anda mengatur properti BindingGroup pada FrameworkElement atau FrameworkContentElement. Elemen turunan mewarisi BindingGroup 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 bahwa DataContextPanel diatur ke objek jenis Address. Pengikatan untuk setiap TextBox ditambahkan ke BindingGroup panel.

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

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

Konstruktor

BindingGroup()

Menginisialisasi instans baru kelas BindingGroup.

Properti

BindingExpressions

Mendapatkan kumpulan objek BindingExpression 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 DependencyObjectType yang membungkus jenis CLR instans ini.

(Diperoleh dari DependencyObject)
Dispatcher

Mendapatkan DispatcherDispatcherObject ini dikaitkan.

(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 peristiwa Error terjadi saat status ValidationRule berubah.

Owner

Mendapatkan objek tempat BindingGroup ini ditetapkan.

SharesProposedValues

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

ValidatesOnNotifyDataError

Mendapatkan atau menetapkan nilai yang menunjukkan apakah akan menyertakan NotifyDataErrorValidationRule.

ValidationErrors

Mendapatkan kumpulan objek ValidationError yang menyebabkan BindingGroup tidak valid.

ValidationRules

Mendapatkan kumpulan objek ValidationRule 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 DispatcherObjectini.

(Diperoleh dari DispatcherObject)
ClearValue(DependencyProperty)

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

(Diperoleh dari DependencyObject)
ClearValue(DependencyPropertyKey)

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

(Diperoleh dari DependencyObject)
CoerceValue(DependencyProperty)

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

(Diperoleh dari DependencyObject)
CommitEdit()

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

Equals(Object)

Menentukan apakah DependencyObject yang disediakan setara dengan DependencyObjectsaat ini.

(Diperoleh dari DependencyObject)
GetHashCode()

Mendapatkan kode hash untuk DependencyObjectini.

(Diperoleh dari DependencyObject)
GetLocalValueEnumerator()

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

(Diperoleh dari DependencyObject)
GetType()

Mendapatkan Type instans saat ini.

(Diperoleh dari Object)
GetValue(DependencyProperty)

Mengembalikan nilai efektif properti dependensi saat ini pada instans DependencyObjectini.

(Diperoleh dari DependencyObject)
GetValue(Object, String)

Mengembalikan nilai yang diusulkan untuk properti dan item yang ditentukan.

InvalidateProperty(DependencyProperty)

Mengevaluasi kembali nilai efektif untuk properti dependensi yang ditentukan.

(Diperoleh dari DependencyObject)
MemberwiseClone()

Membuat salinan dangkal dari Objectsaat ini.

(Diperoleh dari Object)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Dipanggil setiap kali nilai efektif dari properti dependensi apa pun pada DependencyObject ini 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 pengidentifikasi DependencyPropertyKey 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 objek ValidationRule yang memiliki properti ValidationStep diatur ke RawProposedValue, ConvertedProposedValue, atau UpdatedValue dan menyimpan nilai target ke objek sumber jika semua aturan validasi berhasil.

ValidateWithoutUpdate()

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

VerifyAccess()

Memberlakukan bahwa utas panggilan memiliki akses ke DispatcherObjectini .

(Diperoleh dari DispatcherObject)

Berlaku untuk