2010-10-23 61 views
2

我尝试编写导航模型的多重绑定转换器,当我从两个列表框中选择任何listboxitem时,我将页面加载到框架中。同时,我需要能够使用导航类中的“后退/前进”按钮进行导航,并且如果将其UriSource加载到框架中,就能够将ListBoxitem显示为选定状态。我拥有的转换器可以从框架中的两个源列表框中更新urisources,但不能在选定状态下切换listboxitem。我在转换器的ConvertBack部分将listboxitem切换到选定状态。我做错了什么,我总是在一个建造中遇到错误。请让我知道是否有可能实现我想要做的事情。先谢谢你。下面多功能转换器?

的是MultiBindConverter代码:

public class MultiBindConverter : IMultiValueConverter 
{ 
    #region IMultiValueConverter Members 

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (values[0] != null) 
     { 
      if (values[1] != null) 
      { 
       return new Uri(values[1].ToString(), UriKind.RelativeOrAbsolute); 
      } 
      return new Uri(values[0].ToString(), UriKind.RelativeOrAbsolute); 
     } 
     return null; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value != null) 
     { 
      var uri = (Uri)value; 
      var uriString = uri.OriginalString; 

      if (uri.OriginalString.Contains(";component/")) 
      { 
       uriString = uriString.Substring(uriString.IndexOf("/") + 1); 
      } 
      return new object[] { uriString, uriString }; 
     } 
    } 
} 

XAML:

<Frame Grid.Column="2" x:Name="ContentFrame" JournalOwnership="OwnsJournal" NavigationUIVisibility="Visible"> 
     <Frame.Source> 
      <MultiBinding Converter="{StaticResource MultiBindConverter}"> 
       <Binding Path="SelectedValue" ElementName="Nav_ListBox"/> 
       <Binding Path="SelectedValue" ElementName="SublevelListbox"/> 
      </MultiBinding> 
     </Frame.Source> 
    </Frame> 

回答

1

您还没有实现IMultiValueConverter接口。对于ConvertBack签名是:

public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 

这是转换的精确相对这需要在阵列中,所以它需要采取在该单个值和输出值的阵列输出的单个值。在这种情况下,ConvertBack的传入值将是Frame.Source,输出将是2个SelectedValue属性。

+0

谢谢你看我的帖子。这是我很难做到正确。我想知道你是否有机会展示它将如何在代码行中。我试图用它玩足够长的时间,仍然停留在这里。 – vladc77 2010-10-23 17:24:30

+0

我修改了代码,但仍然有问题来运行它。请看上面的代码。我改变了转换器。 – vladc77 2010-10-23 17:34:18

+0

要将值返回给SelectedValue属性,您需要从ConvertBack返回一个2元素数组,其值按照Bindings的顺序。如果你想为它们设置相同的值,它可能是这样的:return new object [] {uriString,uriString};您还需要在绑定上设置Mode =“TwoWay”。 – 2010-10-24 13:38:12