2010-10-23 49 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