[Wpf] اربط عنصرا بمصدرين


Answers

إنشاء المحول الذي ينفذ إيمولتيفالويكونفيرتر. قد تبدو شيئا من هذا القبيل:

class AverageConverter : IMultiValueConverter
{
    #region IMultiValueConverter Members
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        int total = 0;
        int number = 0;
        foreach (object o in values)
        {
            int i;
            bool parsed = int.TryParse(o.ToString(), out i);
            if (parsed)
            {
                total += i;
                number++;
            }
        }
        if (number == 0) return 0;
        return (total/number).ToString();
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

محول مولتيفالو يتلقى صفيف الكائن، واحد لكل من الارتباطات. يمكنك معالجة هذه ولكن تحتاج، اعتمادا على ما إذا كنت تنوي ذلك لمزدوجة أو إنت أو أيا كان.

إذا كان مربعان النص داتابوند، يمكنك استخدام الارتباطات نفسها في مولتيبيندينغ ل تكستبلوك الخاص بك (تذكر أن يخطر عندما تتغير الخاصية بحيث يتم تحديث المتوسط ​​الخاص بك)، أو يمكنك الحصول على قيمة النص عن طريق الإشارة إلى مربعات النص من قبل إليمنتنام.

<TextBox Text="{Binding Value1}" x:Name="TextBox1" />
<TextBox Text="{Binding Value2}" x:Name="TextBox2" />

<TextBlock>
   <TextBlock.Text>
      <MultiBinding Converter="{StaticResource AverageConverter}">
         <Binding ElementName="TextBox1" Path="Text" />
         <Binding ElementName="TextBox2" Path="Text" />
         <!--  OR  -->
         <!-- <Binding Path="Value1" />  -->
         <!-- <Binding Path="Value2" />  -->

      </MultiBinding>
   </TextBlock.Text>
</TextBlock>
Question

لدي حاليا اثنين من مربعات النص التي تقبل أي عدد. لدي كتلة النص الذي يأخذ الرقمين دخلت ويحسب المتوسط.

كنت أتساءل عما إذا كان هناك طريقة يمكنني ربط هذا النص كتلة على حد سواء مربعات النص واستخدام محول مخصص لحساب المتوسط؟ أنا حاليا أنا اصطياد النص تغير الأحداث على كل من مربعات النص وحساب المتوسط ​​بهذه الطريقة، ولكن أنا تحت البيانات افتراض ملزمة سيكون أكثر كفاءة وأسهل.




فقط لإضافة إجراءات خطوة بخطوة إلى إجابة تيموثي:

  1. قم بإعداد الخاصية View.TextBlock.Text لربط الخاصية ViewModel.AvgValue.
  2. قبض على الحدث تكستشانجد من عنصر تحكم مربع نص، ثم قم بتعيين أفغفالو في معالج هذا الحدث تكستشانجد.
  3. كجزء من هذا المعالج في الخطوة 2، تأكد من رفع تغيير الخاصية بحيث يتم تحديث تكستبلوك.