MVVM绑定选定的RadOutlookBarItem

时间:2010-04-20 07:30:58

标签: silverlight mvvm

想象一下:

[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>

转换器:

公共对象转换(对象值,类型targetType,对象参数,CultureInfo文化)     {         //这里是逻辑部分...应该返回Visibility.Collapsed:Visibility.Visible基于'对象值'值

    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 :(得分:0)

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

Visibility = {Binding RelativeSource = {RelativeSource Self},Converter = {StaticResource BoolViz}}

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

那是你在找什么?

干杯, 劳伦