在列表框中导航到框架中的页面

时间:2012-01-26 21:02:00

标签: wpf listbox

我的页面上有以下列表框:

<ListBox Grid.Row="1" Name="SlideSelectorListBox" SelectedItem="{Binding SelectedSlide}" SelectedIndex="{Binding SelectedSlideIndex}" ItemsSource="{Binding Path=Slides}">
   <ListBox.ItemTemplate>
      <DataTemplate>
         <Border BorderBrush="Silver" BorderThickness="1" Padding="3" CornerRadius="5" Height="120" Width="200">
            <Viewbox IsEnabled="False">
               <Frame Height="656" Width="1360" Source ="{Binding Path=SlideURL}" IsEnabled="False"/>
            </Viewbox>
         </Border>
      </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

我以这种方式设置列表框,因为我想在主页的一侧填充其他页面。我已经把它填满了页面,但我不得不使用

SlideURL = new Uri(pagePath, UriKind.RelativeOrAbsolute);

在我将它们添加到页面时导航框架。问题是当我以这种方式导航帧时,我无法向页面发送参数。任何人都能在发送参数的同时知道这样做的方法吗?

2 个答案:

答案 0 :(得分:0)

您应该使用UriBuilder来处理QueryString参数。我会使用自定义IValueConverter将URI转换为带参数的有效URI。以下是有关如何为URI构建器创建基本字符串的示例。您可以使用ConverterParameter绑定将参数信息传递给转换器。

/// <summary>
/// Converter from string to URI
/// </summary>
public class StringToUriConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Uri uri = null;
        string stringValue = value as string;
        if (stringValue != null)
            Uri.TryCreate(stringValue, UriKind.Absolute, out uri);
        return uri;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
       throw new InvalidOperationException("Only one-way binding is supported!");
    }
}

答案 1 :(得分:0)

我找到的最好方法是将帧的来源绑定更改为帧的内容。卫生署!

<ListBox Grid.Row="1" Name="SlideSelectorListBox" SelectedItem="{Binding SelectedSlide}" SelectedIndex="{Binding SelectedSlideIndex}" ItemsSource="{Binding Path=Slides}">
   <ListBox.ItemTemplate>
       <DataTemplate>
            <Border BorderBrush="Silver" BorderThickness="1" Padding="3" CornerRadius="5" Height="120" Width="200">
                <Viewbox IsEnabled="False">
                    <Frame Height="656" Width="1360" Content="{Binding Path=SlidePage}" IsEnabled="False"/>
                </Viewbox>
           </Border>
       </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

然后你可以创建一个页面集合,在创建它时传递页面参数。

private Page _slidePage = new ProductionReportView(paramter);
public Page SlidePage
{
    get { return _slidePage; }
    set
    {
        _slidePage = value;
        NotifyPropertyChanged("SlidePage");
    }
}