كيف يمكن أن أقول بلدي ViewModel أن المستخدم هو تغيير النص في مربع النص?

StackOverflow https://stackoverflow.com/questions/1013208

  •  06-07-2019
  •  | 
  •  

سؤال

لذلك دعونا نقول لدي MVVM تطبيق وأريد المستخدم لملء مربع نص و بينما هو في ملء, أريد أن تحقق لمعرفة ما إذا كان قد كتبته في الاسم الأخير من العملاء حتى الآن.

هنا هو كيف يمكنني الحصول على بلدي ViewModel أن تعرف عندما يكون المستخدم لديه تغيير هذا البند في مربع تحرير وسرد:

<ComboBox 
    ItemsSource="{Binding Customers}"
    ItemTemplate="{StaticResource CustomerComboBoxTemplate}"
    Margin="20"
    HorizontalAlignment="Left"
    SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"/>

وهنا هو كيف يمكنني الحصول على بلدي ViewModel أن تعرف عندما يكون المستخدم لديه حرك المنزلق:

<Slider Minimum="0" 
        Margin="10"
        Width="400"
        IsSnapToTickEnabled="True"
        Maximum="{Binding HighestCustomerIndex, Mode=TwoWay}" 
        Value="{Binding SelectedCustomerIndex, Mode=TwoWay}"/>

وهنا هو كيف يمكنني الحصول على بلدي ViewModel أن تعرف عندما يكون المستخدم لديه تغيير النص في مربع نص ، ثم نقل التركيز بعيدا من مربع نص:

<TextBox
    Width="200"
    Text="{Binding TypedCustomerName}"/>

ولكن كيف يمكنني الحصول على بلدي ViewModel أن تعرف عندما يكون المستخدم لديه تغيير النص في مربع النص كما هو أنواع, مثلاشيء من هذا القبيل:

الزائفة رمز (أسباب الخطأ منذ TextChanged هو الحدث):

<TextBox
    Width="200"
    TextChanged="{Binding CurrentTextInTextBox}"/>
هل كانت مفيدة؟

المحلول

إذا كنت تحب بدلا من تحديث ViewModel عندما يكون النص قد فقدت التركيز ، يمكنك تعيين إلى تحديث كما أنها نوع.على UpdateSourceTrigger على نص ملزم الملكية من مربع نص يتم تعيين LostFocus افتراضيا بدلا من PropertyChanged مثل معظم عناصر التحكم الأخرى, ومع ذلك يمكنك تعيين صراحة في ملزمة.من خلال القيام بذلك ، TypedCustomerName الملكية في VM أو م سيتم تحديث كما هو تغير في واجهة المستخدم.

<TextBox
Width="200"
Text="{Binding TypedCustomerName, UpdateSourceTrigger=PropertyChanged}"/>

إذا لم يكن هذا ما تبحث عنه, هل يمكن أيضا استخدام AttachedCommandBehaviors لربط TextChanged توجيه الحدث إلى ICommand موجود في نموذج عرض.

نصائح أخرى

TextBoxex الافتراضي هو تحديث على LostFocus.مجموعة UpdateSourceTrigger="PropertyChanged" تحديث المستخدم هو كتابة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top