Предотвращение выбора пользователем вкладки WPF Tab Item - PullRequest
4 голосов
/ 27 августа 2010

Я должен был запретить пользователю выбирать tabitem в WPF TabControl,

1), если только и до тех пор, пока пользователь не установит флажок в одном условии, пользователю должно быть показано окно сообщения, и если он проверяетфлажок, по которому он может перейти на любую другую вкладку

2) Проверяя определенное условие, пользователь не должен иметь возможность попасть на определенную вкладку при его выборе, и у меня нет возможности заставить свернуть элемент вкладки.и должно появиться окно сообщения и вернуться к тому же элементу prv tab, выбранному

. Я видел пример кода Смита Джоша, как показано ниже, и это именно то, что я хотел для 1-го scenerio

http://joshsmithonwpf.wordpress.com/2009/09/04/how-to-prevent-a-tabitem-from-being-selected/

Но мне нужно что-то, что работает в MVVM, где мое приложение имеет строгое «No CodeBehind»

Ответы [ 2 ]

0 голосов
/ 27 августа 2010

РЕДАКТИРОВАТЬ: Я проверил мой другой код, и он не работал.В любом случае это была просто идея.Вот метод, который работает (хотя я согласен с Алексом, что код в MVVM хорош при настройке View).

В этом случае я создал конвертер, который принимает два логических значения: если выбрана вкладка и можно ли менять вкладки.Если для обоих из них установлено значение false, мы возвращаем false, чтобы отключить вкладку.Если для любого из них установлено значение true, мы оставляем вкладку включенной.

Вот код.В моей виртуальной машине есть свойство CanChangeTabs и экземпляр MyConverter в Window.Resources с именем Converter.

XAML inTabItem:

<TabItem.IsEnabled>
    <MultiBinding Converter="{StaticResource Converter}">
        <Binding RelativeSource="{RelativeSource Self}" Path="IsSelected" />
        <Binding Path="CanChangeTabs" />
    </MultiBinding>
</TabItem.IsEnabled>

Converter:

public class MyConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        foreach (object value in values)
        {
            if ((bool)value)
            {
                return true;
            }
        }
        return false;
    }

    public object[] ConvertBack(object values, Type[] targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
0 голосов
/ 27 августа 2010

Вы можете унаследовать TabControl (или добавить присоединенное свойство), который контролирует, разрешена ли навигация к другому элементу вкладки; тем не менее, позвольте мне подчеркнуть, что «отсутствие кода» довольно глупо - есть много раз, когда код позади может использоваться только для просмотра, и это нормально.

Возвращаясь к проблеме ... вы бы использовали мое предложение, чтобы скрыть выделенный код (проверка, разрешено ли действие) внутри элемента управления, чтобы фактическое представление (страница / окно и т. Д.) Не ' не содержать его. Если вы объявляете новое свойство как DependencyProperty, вы получаете все средства привязки и т. Д.

...