Мультисвязывающий конвертер? - PullRequest
3 голосов
/ 23 октября 2010

Я пытаюсь написать мультисвязывающий конвертер для модели навигации, где я загружаю страницы в фрейм, когда любой элемент списка выбирается из двух списков. В то же время мне нужно иметь возможность перемещаться с помощью кнопок «Назад» и «Вперед» из класса навигации и иметь возможность отображать элемент списка в выбранном состоянии, если его UriSource загружен в кадр. Укрыватель, который у меня есть, может обновить источники из двух списков источников в рамке, но не может переключить элемент списка в выбранном состоянии. Я переключаю listboxitem в выбранное состояние на ConvertBack части конвертера. Я сделал что-то не так, я всегда получаю ошибки на встроенном. Пожалуйста, дайте мне знать, если возможно достичь того, что я пытаюсь сделать. Заранее спасибо.

Ниже приведен код 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 Ответ

2 голосов
/ 23 октября 2010

Вы не используете интерфейс IMultiValueConverter.Подпись для ConvertBack:

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

Это полная противоположность Convert, который принимает массив и выводит одно значение, поэтому ему нужно принять это единственное значение и вывести массив значений.Входящее значение для ConvertBack в этом случае будет Frame.Source, а выходные данные будут 2 свойствами SelectedValue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...