首页 文章

MVVM绑定选定的RadOutlookBarItem

提问于
浏览
0

想像:

[RadOutlookBarItem1] [RadOutlookBarItem2] [RadOutlookBar] [CONTENCONTROL]

我想要实现的是:

用户选择RadOutlookBarItem之一 . Item的标签绑定如下:

Tag="{Binding SelectedControl, Mode=TwoWay}"

MVVM属性

public string SelectedControl 
{ 
    get { return _showControl; } 
    set 
    { 
        _showControl = value; 
        OnNotifyPropertyChanged("ShowControl"); 
    } 
}

ContentControl有多个CustomControls,其可见性受限于:

<UserControl.Resources> 
        <Converters:BoolVisibilityConverter x:Key="BoolViz"/> 
    </UserControl.Resources> 
    <Grid x:Name="LayoutRoot" Background="White"> 
        <Views:ViewDocumentSearchControl Visibility="{Binding SelectedControl, Converter={StaticResource BoolViz}, ConverterParameter='viewDocumentSearchControl'}"/> 
        <Views:ViewStartControl Visibility="{Binding SelectedControl, Converter={StaticResource BoolViz}, ConverterParameter='viewStartControl'}"/> 
    </Grid>

转换器:

public object Convert(object value,Type targetType,object parameter,CultureInfo culture){//这里是逻辑部分......应返回Visibility.Collapsed:Visibility.Visible基于'object value'值

System.Diagnostics.Debugger.Break(); 
    return Visibility.Collapsed;  
}

现在,逻辑上对象值始终设置为null . 所以这就是我的问题:如何将值放入RadOutlookBarItem标签的SelectedControl变量中 . 我的意思是

Tag="{Binding SelectedControl, Mode=TwoWay, VALUE='i.e.ControlName'"}

因此,我可以使用转换方法决定特定Control的可见性是设置为折叠还是可见?

帮助表示赞赏

基督教

---来自Laurent的解决方案---

是的,这就是我想要的,不幸的是VS.NET 2010 / Blend 4RC在实现之后崩溃了:

<Views:ViewDocumentSearchControl Visibility="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource BoolViz}}"/> <Views:ViewStartControl Visibility="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource BoolViz}}"/>

每当我在Blend / VS.NET中打开XAML时,我都会停止工作 . 将ValueConverter的返回值更改为Visibility.Visible,仍然相同 . 不知道 . 不管怎么说,还是要谢谢你!基督教

---我的(临时)解决方案/解决方法---

好的,我最终得到了这个解决方案:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value != null && parameter != null)
            {
                var val = (string) value;
                var ctrl = (string) parameter;
                if (val.Equals(ctrl))
                {
                    return Visibility.Visible;
                }
                return Visibility.Collapsed;
            }
            return Visibility.Collapsed;
        }

并在Codebehind中设置RadOutlookBarItem的.Tag ...

1 回答

  • 0

    听起来您想将当前项目传递给转换器并返回可见性 . 我可能没有完全理解你的意思,但如果是这样的话,这应该适合你:

    Visibility = {Binding RelativeSource = ,Converter = }

    “value”参数将在第一种情况下设置为ViewDocumentSearchControl,在第二种情况下设置为ViewStartControl .

    那是你在找什么?

    干杯,洛朗

相关问题