مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

salman_b

عضویت از 1396/02/18

مشکل SelectedValue در Combobox Editabel

  • دوشنبه 25 دی 1396
  • 13:27
تشکر میکنم

مشکل عجیبی که بهش خوردم اینه که توی ComboBox هایی که Editable باشن کاربر بیاد یه مقداری رو انتخاب کنه و این مقادیر فارسی هستن

<ComboBox Name="cmbColor" IsEditable="True" DisplayMemberPath="clr" SelectedValue="clr" Margin="140,117,161,167"/>

این comboBox مقادیر رنگ رو درون خودش داره که از database میخونه و پر میکنه

            using (Context db = new Context())
            {
                Colors = db.colormtr.Select(c => c).ToList();
            }

خب حالا زمانی که روی دکمه ی ثبت بزنیم باید کنترل کنیم که کاربر مقداری رو که وارد کرده داخل ItemsSource بوده باشه

که از کد زیر استفاده میکنیم

            if(cmbColor.SelectedValue == null)
            {
                MessageBox.Show("Selected Value is null");
            }
            else
            {
                MessageBox.Show("Selected Value is not null");
            }

خب حالا مشکل اصلی رو توضیح بدم

اولا که ItemsSource مقادیر فارسی دارن نه انگلیسی و این مشکل تو فارسی پیش میاد نه انگلیسی

زمانی که کاربر یه حرف از آخر پاک کنه شرطی که گذاشتم متوجه null بودن value نمیشه اما اگه از وسط پاک کنیم متوجه میشه!

مشکل فقط اینه اگه حرفی رو از آخر پاک کنه پیام selected value is not null چاپ میشه!!!!!!

ComboBox هم حتما باید editable باشه چون شاید حدود ۲۰ آیتم توی ComboBox پر میشه و واسه ی راحتی کار واقعا نیاز داریم این مورد رو

پاسخ های این پرسش

تعداد پاسخ ها : 1 پاسخ
کاربر سایت

سجاد باقرزاده

عضویت از 1392/02/24

  • چهارشنبه 27 دی 1396
  • 14:28

برای جلوگیری از بروز مشکل در انتخاب یکی از گزینه های کمبوباکس که قابلیت ویرایش را دارد بهتر است یک خصوصیت جدید را به آبجیک ها اضافه کنیم که در کلاس زیر نوشته شده است و با اضافه کردن فضای نام آن به پنجره خود و استفاده از آن خصوصیت به کاربر اجازه ویرایش را بدهیم با این تفاویت که دیگر اجازه نوشته متنی غیر از گزینه اصلی را نداشته باشد.

کلاس زیر را به پروژه اضافه میکنیم :

    public class ComboBoxUtils
    {
        public static bool GetProtectText(DependencyObject obj)
        {
            return (bool)obj.GetValue(ProtectTextProperty);
        }

        public static void SetProtectText(DependencyObject obj, bool value)
        {
            obj.SetValue(ProtectTextProperty, value);
        }

        // Using a DependencyProperty as the backing store for ProtectText.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty ProtectTextProperty =
            DependencyProperty.RegisterAttached("ProtectText", typeof(bool), typeof(ComboBoxUtils), new FrameworkPropertyMetadata(OnProtectTextChanged));

        private static void OnProtectTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var box = d as ComboBox;
            if (box == null) return;
            if (true.Equals(e.NewValue))
            {
                box.SelectionChanged += OnSelectionChanged;
            }
            else
            {
                box.SelectionChanged -= OnSelectionChanged;
            }
        }

        private static void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var box = sender as ComboBox;
            if (box == null) return;
            if (box.SelectedItem == null)
            {
                var text = box.Text;
                Action setText = () => { box.Text = text; };
                Dispatcher.CurrentDispatcher.BeginInvoke(setText);
            }
        }
    }

سپس در صفحه XAML خود فضای نام را به صفحه و خصوصیته مربوطه  را به کمبوباکس اضافه میکنیم :

xmlns:local="clr-namespace:ComboBoxText"

<ComboBox x:Name="Combo" local:ComboBoxUtils.ProtectText="True"
 Grid.Row="0" Grid.Column="1" 
 IsEditable="True" ItemsSource="{Binding ItemsSource}" Text="{Binding Text, Mode=TwoWay}" />

مقاله اصلی را هم به همراه ضمیمه در زیر می توانید مشاهده و دانلود کنید :

Editable ComboBox Text Disappears

فایل های ضمیمه

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)