وقف الملاحة في الرقابة الحالية على خطأ التحقق من صحة. كيف؟

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

سؤال

ولدي مشكلة مع تطبيق WPF بلدي.

ولدي DataGrid قابلة للطفولة (اليونيسيف أدوات)، لا بد لي من إدارة التحقق من صحة الصف ... إذا نتيجة التحقق من صحة خاطئة أود أن الصف الآخر ليس اختيار.

وذلك لدي لمنع التحديد إلى الصف الحالي بأنني تحريرها.

وكيف يمكنني أن أفعل؟ أي أفكار؟

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

المحلول

ولوقا،

وأنت لست أول من طرح هذا السؤال. لها عيب كبير لنسخة برنامج الأغذية العالمي الحالي حيث لا يوجد حدث مثل PreviewSelectionChangeEvent لمحدد تستمد السيطرة. المجتمع الوحيد المقبول حل لهذه المشكلة هو بالطبع حل HACK. هنا هو النهج.

public void OnSelectionChange(object sender, SelectionChangedEventArgs e)
{
    // Selector is based class for all selection enabled control
    // (not too sure if your datagrid
    // derives from the same class, you will need to check).
    var selector = e.OriginalSource as Selector;
    if (selector == null) return;

    // Get the old items and new items from the selection change
    // (note, that they are IList type).
    // Let's assume that your datagrid will only allow single cell selection only,
    // ie. newItems.Count == 1
    var newItems = e.AddedItems;
    var oldItems = e.RemovedItems;

    // May need to check if not null first.
    if (oldItems.Count == 1 && newItems.Count == 1)
    {
        // Checking logic for the first (and only) items.
        // Casting the item into our known type.
        var myObject = newItems[0] as myType;

        // Notice that I reversed the logic, this is because we are
        // only interested in when our logic fails and we need to revert
        // the selection to the old item,
        // otherwise the new item is selected by default
        if (!(myObject != null && SomeOtherCondition))
            selector.SelectedItem = oldItems[0];

    }

}

وعلى أمل أن يقودك إلى الحل.

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