多重转换器?

时间:2010-10-23 04:31:00

标签: wpf binding

我正在尝试为导航模型编写一个多绑定转换器,当从两个列表框中选择任何listboxitem时,我将页面加载到一个框架中。同时,我需要能够使用导航类中的后退/前进按钮进行导航,并且如果将UriSource加载到帧中,则能够以选定状态显示listboxitem。我有的转换器可以从框架中的两个源 - 列表框更新urisource,但不能在选定状态下切换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 个答案:

答案 0 :(得分:2)

您没有实现IMultiValueConverter接口。 ConvertBack的签名是:

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

它与Convert完全相反,它接收一个数组并输出一个值,因此它需要接收该单个值并输出一个值数组。在这种情况下,ConvertBack的传入值将是Frame.Source,输出将是2个SelectedValue属性。