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


Answers

إنشاء محول يقوم بتطبيق IMultiValueConverter. قد يبدو شيء من هذا القبيل:

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
}

يتلقى محول multivalue صفيف كائن ، واحد لكل من الارتباطات. يمكنك معالجة هذه الأشياء مهما احتجت ، اعتمادًا على ما إذا كنت تنوي استخدامها لمضاعفة أو كثافة العمليات أو أي شيء آخر.

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

<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. قبض على الحدث TextChanged لعنصر التحكم TextBox ، ثم قم بتعيين AvgValue في معالج هذا الحدث TextChanged.
  3. كجزء من هذا المعالج في الخطوة 2 ، تأكد من رفع تغيير خاصية بحيث يتم تحديث TextBlock.





Links