سؤال

تحيات،

في WPF DataGridTemplateColumn ، لدي celltemplate باستخدام ListView و cellEditingTemplate باستخدام DataGrid.

<DataTemplate x:Key="LimitsTemplate">
    <ListView ItemsSource="{Binding Limits}" IsEnabled="False">
        <ListView.ItemTemplate>
            ...
        </ListView.ItemTemplate>
    </ListView>
 </DataTemplate>
 <DataTemplate x:Key="LimitsEditingTemplate">
      <toolkit:DataGrid ItemsSource="{Binding Limits}" ...>
            ...
      </toolkit:DataGrid>
 </DataTemplate>

المشكلة التي أواجهها هي كيفية إجبار العمود على وضع التحرير عند النقر المزدوج؟ هذا هو السلوك الافتراضي للأعمدة الأخرى وأعتقد أن DataGrid بشكل عام. يبدأ الضغط على F2 في وضع التحرير ، ولكن النقر نقرًا مزدوجًا على استخدام الماوس.

إذا قمت بتعيين ListView.IsEnabled على FALSE ، فإن أعمال النقر المزدوج ، ولكن بعد ذلك ، لدي طريقة عرض قائمة معاقين لا يبدو صحيحًا ويشعر أي اختراق بالأناقة وكأنه kludge قبيح.

لاحظ أنني حاولت نقرة واحدة تحرير التي لم تفعل الحيلة.

أي مساعدة موضع تقدير ، شكرا!

هل كانت مفيدة؟

المحلول

بالطبع بمجرد أن أسأل ذلك ، تتحقق الإجابة :) إذا استخدمت طريقة FindVisualParent من خدعة تحرير نقرة واحدة وتسلك ما يصل إلى القائمة عرض انقر نقرًا مزدوجًا إلى كل شيء كما هو متوقع:

<DataTemplate x:Key="LimitsTemplate">
    <ListView ItemsSource="{Binding Limits}" PreviewMouseDoubleClick="limitsListView_PreviewMouseDoubleClick">
    ...

وفي الكود وراء:

static T FindVisualParent<T>(UIElement element) where T : UIElement
{
    UIElement parent = element;
    while (parent != null)
    {
        T correctlyTyped = parent as T;
        if (correctlyTyped != null)
        {
            return correctlyTyped;
        }

        parent = System.Windows.Media.VisualTreeHelper.GetParent(parent) as UIElement;
    }
    return null;
}

void limitsListView_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    DataGrid dataGrid = FindVisualParent<DataGrid>(sender as UIElement);
    if (dataGrid != null)
    {
        dataGrid.BeginEdit();
    }
}

نصائح أخرى

لقد واجهت مشكلة مشابهة جدًا مع DataGrid الخاص بي. إليك ما تسبب في المشكلة في مشروعي: يتم تعيين قائمة مخصصة لتنفيذ قائمة مخصصة تنفذ قائمة مخصصة.

لقد قمت بتطبيق هذه القائمة بحيث تُرجع كائنًا مختلفًا لمكالمات مختلفة من نفس الفهرس .. مثل إذا قمت بالاتصالات [0] في المرة الأولى التي تُرجع فيها كائنًا يحمل اسم "WPF" على سبيل المثال إذا قمت بالاتصال به مرة أخرى [قائمة [ 0] سيعود لك كائن جديد تمامًا يحمل قيمة "WPF".

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

مدونتي

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