Привязка видимости контекстной вкладки ленты WPF

Мне удивительно сложно найти примеры привязки видимости Группа контекстных вкладок ленты. У меня есть свойство в моем программном коде, которое должно решать, когда отображать вкладку ленты, но все, что я пробовал до сих пор, не имеет никакого эффекта. Мой код по существу:

public partial class MainWindow : RibbonWindow
{
    public string Port { get; set; }
}

Краткое изложение моего кода WPF приведено ниже. Я ищу решение, которое связывает свойство Visibility с тем, является ли MainWindow.Port null.

<ribbon:RibbonWindow
    ...
    xmlns:src="clr-namespace:MagExplorer" />

    ...

    <ribbon:RibbonTab x:Name="COMTab" 
                      Header="COM"
                      ContextualTabGroupHeader="Communications">
    ...
    </ribbon:RibbonTab>

    <ribbon:Ribbon.ContextualTabGroups>
        <ribbon:RibbonContextualTabGroup Header="Communications"
                                         Visibility="<What goes here?>" />
    </ribbon:Ribbon.ContextualTabGroups>

person E-rich    schedule 09.06.2014    source источник


Ответы (1)


Вы можете создать конвертер IsNotNullToVisibilityConverter

с помощью метода Convert следующим образом:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is string)
        {
            if (!string.IsNullOrEmpty((string)value))
                return Visibility.Visible;
        }
        else if (value != null)
        {
            return Visibility.Visible;
        }

        return Visibility.Collapsed;
    }

А затем поместите его в свой XAML

<Window.Resources>
    <IsNotNullToVisibilityConverter x:Key="IsNotNullToVisibilityConverter" />
</Window.Resources>
...
Visibility="{Binding Path=Port, Converter={StaticResource IsNotNullToVisibilityConverter}}" 

В вашем коде позади:

public static readonly DependencyProperty PortProperty =
        DependencyProperty.Register
        ("Port", typeof(String), typeof(NameOfYourClass),
        new PropertyMetadata(String.Empty));

public String Port
    {
        get { return (String)GetValue(PortProperty); }
        set { SetValue(PortProperty, value); }
    }
person mlemay    schedule 09.06.2014
comment
Это похоже на то, что я пробовал, но я не могу заставить его работать. Я пытался вставить Console.WriteLine("HERE") в Convert(), но ничего не печатается. Чего-то еще не хватает? - person E-rich; 09.06.2014
comment
Если метод Convert не вызывается, может ваша привязка неверна? Вам нужно определить ElementName (где свойство Port). Попробуйте поместить в RibbonWindow вверху x: Name = ctl, а затем привязать: Visibility = {Binding Path = Port, ElementName = ctl, Converter = {StaticResource IsNotNullToVisibilityConverter} } - person mlemay; 09.06.2014
comment
О, подождите, ваше свойство Port должно быть DependencyProperty для привязки, я обновил свой ответ - person mlemay; 09.06.2014