This article was translated by machine. To view in the article in English, select the English check box. You can also display the English text in a popup window by moving the mouse pointer over the text.
الترجمة
الأصلي
This documentation is archived and is not being maintained.

BindingGroup الفئة

Visual Studio 2010

يحتوي على مجموعة من الروابط و ValidationRuleالكائنات التي تستخدم إلى التحقق من صحة على كائن.

مساحة الاسم:  System.Windows.Data
التجميع:  PresentationFramework (في PresentationFramework.dll)
XMLNS لـ XAML: http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/netfx/2007/xaml/presentation

public class BindingGroup : DependencyObject

BindingGroup إنشاء علاقة بين روابط متعددة، يمكن التحقق من صحتها وتحديثها مع بعضها البعض. على سبيل المثال، افترض أن يطالب أحد تطبيقات مستخدم إلى إدخال العنوان بريد. تطبيق ثم قم بتعبئة كائن من نوع Address، الذي يحتوي خصائص، Street، City، ZipCode، و Country، الذي يحتوي على قيم التي تم توفيرها للمستخدم. يحتوي تطبيق على لوحة التي تحتوي على أربع TextBoxيتحكم، كل منها هو بيانات منضمة إلى إحدى خصائص الكائن. يمكنك استخدام ValidationRuleفي BindingGroupللتحقق من صحة Addressالكائن. If the bindings participate في the same BindingGroup, you can ensure that the zip-تعليمات برمجية هو صالح for the country of the العنوان.

You التعيين the BindingGroup خاصية تشغيل FrameworkElement أو FrameworkContentElement. فرع عناصر يورث the BindingGroup من their parent عناصر, just كـ مع أي غير ذلك inheritable خاصية. A ربط تشغيل a descendent عنصر هو تمت الإضافة إلى a BindingGroup if واحد of the following situations occurs:

  • The ربط's المصدر و the DataContext of the عنصر that has the BindingGroup are the same كائن و the BindingGroupName خاصية ليس التعيين.

  • The BindingGroupName خاصية of the ربط هو يساوي the Name of the BindingGroup و they are not بوضوح التعيين إلى null.

في the مثال of the العنوان, suppose that the DataContext of the Panel هو التعيين إلى the كائن of نوع Address. The ربط for each TextBox هو تمت الإضافة إلى the BindingGroup of the لوحة.

You إضافة ValidationRule الكائنات إلى a BindingGroup. The BindingGroup هو passed كـ the أول معلمة of the Validate أسلوب when the ValidationRule runs. You can استخدم the TryGetValue أو GetValue(Object, String) أسلوب تشغيل that BindingGroup إلى يحصل the proposed قيم of the كائن, و the Items خاصية إلى يحصل the المصادر of the bindings.

A BindingGroup تحديثات the المصادر of the ربط at the same الوقت instead of each ربط being محدث separately. When you يتصل واحد of the وظائف إلى التحقق من صحة the بيانات (ValidateWithoutUpdate, UpdateSources, أو CommitEdit), the ربط for each TextBox في the مثال هو validated و potentially محدث. When a ربط هو part of a BindingGroup, the المصدر of the ربط ليس محدث until you يتصل UpdateSources أو CommitEdit تشغيل the BindingGroup, unless you بوضوح التعيين the UpdateSourceTrigger خاصية.

The following أمثلة إنشاء an تطبيق that prompts the مستخدم إلى Enter الزر the وصف و price of an العنصر و the التاريخ that the offer expires. The تطبيق displays the الحالي معلومات for the العنصر below the نموذج. The مستخدم can إرسال أو إلغاء الأمر the التغييرات.

يقوم تطبيق يلي إلى تحقيق هذا سلوك.

  • ينشئ على BindingGroupوإضافته إلى الجذر StackPanelعندما ينشئ واجهة المستخدم (UI)من تطبيق.

  • BeginEdit ، باستدعاء CommitEdit، و CancelEditفي منطق تطبيق إلى تمكين يتم الآن استعادة التغييرات.

  • استدعاء الدالة TryGetValueفي Validateطريقة الحصول على إدخال مستخدم ومن ثم تحقق من التي عنصر عبر 100 دولار هو متوفرة للأقل سبعة أيام.

يقوم المثال التالي بإنشاء واجهة المستخدم (UI)من تطبيق. جذر StackPanelh كـ BindingGroupالذي يحتوي على ValidationRuleالتي بالتحقق من صحة العنصر، كـ الموصوفة سابقا. الكائنات الربط تشغيل Priceخاصية و OfferExpiresخاصية تصبح جزء من BindingGroupويحتوي كل ربط ValidationRuleإلى التأكد من أن سعر وتاريخ، تشغيل التوالي، قيم صحيحة. تشغيل قواعد التحقق من صحة للخصائص الفردية قبل ValidationRuleعلى 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>


يلي مثال يظهر معالجات الأحداث للتطبيق. عندما يقوم مستخدم بالنقر فوق الزر إرسال، يقوم تطبيق باستدعاء CommitEditليعمل كل ValidationRuleالتي هو المقترنة BindingGroup. إذا كان كل ValidationRuleبنجاح, CommitEditحفظ قيم إلى الكائن وتنتهي عملية التحرير. إذا CommitEditهو ناجحاً، قيام تطبيق ببدء عملية تحرير آخر. عند ValidationRuleفشل، Validation.Errorيحدث حدث بسبب تطبيق التعيين NotifyOnValidationErrorإلى trueتشغيل BindingGroup(في the السابق مثال). ItemErrorhوlesValidation.Errorحدث و يعرض معلومات حول الخطأ التحقق من صحة إلى المستخدم. مثال أيضا معالجة Loadedحدث StackPanelو Clickحدث زر "إلغاء الأمر" .



        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();
        }



The following example shows the custom ValidationRule ValidateDateAndPrice, which was added to the BindingGroup in the first example. ValidationRule يستخدم BindingGroupفي به Validateطريقة للحصول على قيم مستخدم إدخالها في النموذج، وفحص حالة عنصر هو فوق 100 دولار، سيكون متوفراً للأقل سبعة أيام.


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;

    }
}


يتم تأمين العملية الجزئية لأي عضو عمومي ثابت (مشترك في Visual Basic) من هذا النوع. لن يتم ضمان تأمين العملية الجزئية لأي عضو مثيل.

نظام التشغيل Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, نظام التشغيل Windows Server 2003

لا يدعم .NET Framework و .NET Compact Framework كافة الإصدارات الخاصة بكل نظام أساسي. للحصول على قائمة بالإصدارات المدعمة، راجع متطلبات النظام إطار عمل .NET.

.NET Framework

مدعوم في: 4, 3.5 المزود بحزمة الخدمة SP1, 3.0 المزود بحزمة الخدمة SP2

NET Framework. Client Profile

مدعوم في: 4
إظهار: