4

我不得不阻止用户在 WPF TabControl 中选择一个 tabitem,

1) 除非用户在一种情况下选中复选框,否则应向用户显示一个消息框,如果他选中该复选框,他可以导航到任何其他选项卡

2)检查特定条件,用户在选择时不应该进入特定选项卡,并且我没有使选项卡项折叠的选项。它应该弹出一个消息框并返回到同一个 prv 选项卡选择的项目

我已经看到了 Smith Josh 的示例代码如下,这正是我想要的第一个场景

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

但是我需要在 MVVM 中工作的东西,我的应用程序有一个严格的“No CodeBehind”

4

2 回答 2

0

编辑:我测试了我的其他代码,但它没有用。反正只是一个想法。这是一种有效的方法(尽管我同意 Alex 的观点,即调整视图时 MVVM 中的代码很好)。

在这种情况下,我创建了一个带有两个布尔值的转换器:如果选择了选项卡,以及我们是否可以更改选项卡。如果这两个都设置为 false,我们返回 false 以禁用选项卡。如果任一设置为 true,我们将启用该选项卡。

这是代码。我的 VM 中有一个名为 CanChangeTabs 的属性,在 Window.Resources 中有一个名为 Converter 的 MyConverter 实例。

XAML inTabItem:

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

转换器:

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();
    }
}
于 2010-08-27T15:40:32.983 回答
0

您可以继承 TabControl(或添加附加属性),它控制是否允许导航到另一个选项卡项;但是,让我强调一下“没有代码隐藏”有点傻 - 很多时候代码隐藏可以用于仅查看目的,这没关系。

回到问题......你会使用我的建议做的是隐藏控件内的代码隐藏(检查是否允许操作),以便实际视图(页面/窗口等)不包含它. 如果您将新属性声明为 DependencyProperty,您将获得所有绑定工具等。

于 2010-08-27T15:34:33.430 回答