Остановить навигацию к текущему элементу управления при ошибке проверки. Как? - PullRequest
0 голосов
/ 30 октября 2009

У меня проблема с приложением WPF.

У меня есть сетка данных (Wpf Toolkit), я должен управлять проверкой строки ... если результат проверки ложен, я бы сказал, что другая строка не может быть выбрана.

Поэтому я должен заблокировать выделение текущей строки, которую я редактирую.

Как я могу это сделать? Есть идеи?

1 Ответ

0 голосов
/ 31 октября 2009

Люк

Вы не первый, кто задает этот вопрос. Это главный недостаток текущей версии WPF, где нет события, такого как PreviewSelectionChangeEvent для производного элемента управления Selector. Единственное решение, принятое сообществом для решения этой проблемы - это, конечно, решение 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];

    }

}

Надеюсь, что это приведет вас к решению.

...