交换主要应用程序内容

时间:2011-11-18 06:53:13

标签: wpf xaml binding

哪种做法是根据列表框选择更换内容的最佳方法?想想win7的左侧控制面板的链接是如何工作的 - 这就是我想要实现的目标。

到目前为止,我已经设置了代码,但由于某些原因我无法让它实际工作(可能是我做错了绑定)而且我认为这可能不是最好的方法任

<Window x:Class="ControlCenter.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <ControlTemplate x:Key="workspace_1" x:Name="Workspace_1">
        <StackPanel>
            <Button>Test</Button>
            <Button>Link to Workspace 2</Button>
            <Button>Random function 3</Button>
        </StackPanel>
    </ControlTemplate>
    <ControlTemplate x:Key="workspace_2" x:Name="Workspace_2">
        <StackPanel>
            <Button>Test 2</Button>
            <TextBlock>Some random text</TextBlock>
            <Button>Placeholder</Button>
        </StackPanel>
    </ControlTemplate>
    <ControlTemplate x:Key="workspace_3" x:Name="Workspace_3">
        <Border Background="Black" />
    </ControlTemplate>
</Window.Resources>
<Grid>
    <DockPanel>
        <ListBox Name="lst_workspaces" Width="150">
            <ListBoxItem Content="{DynamicResource ResourceKey=workspace_1}" />
            <ListBoxItem Content="{DynamicResource ResourceKey=workspace_2}" />
            <ListBoxItem Content="{DynamicResource ResourceKey=workspace_3}" />
        </ListBox>
        <ContentControl Template="{Binding ElementName=lst_workspaces, Path=SelectedItem.Value}">

        </ContentControl>
    </DockPanel>
</Grid>

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我相信您需要根据ContentControlListViewListBox等其他控件中的选择更改TreeView上的Conetnt

我这样做了

            <ContentControl Name="userControlContentControl"
                            Content="{Binding ElementName=YourListViewname,
                                              Path=SelectedItem}">
                <ContentControl.Resources>
                    <DataTemplate DataType="{x:Type ViewModelLayer:UserControl1ViewModel}">
                        <ViewLayer:UserControl1 DataContext={Binding}/>
                    </DataTemplate>
                    <DataTemplate DataType="{x:Type ViewModelLayer:UserControl2ViewModel}">
                        <ViewLayer:UserControl2 DataContext={Binding} />
                    </DataTemplate>
                    <DataTemplate DataType="{x:Type ViewModellayer:UserControl3ViewModel}">
                        <ViewLayer:UserControl3 DataContext={Binding} />
                    </DataTemplate>
                    <DataTemplate DataType="{x:Type ViewModellayer:UserControl4ViewModel}">
                        <ViewLayer:UserControl4 DataContext={Binding} />
                    </DataTemplate>
               </ContentControl.Resources>
            </ContentControl>  

我的ListView的集合ObservableCollection<ViewModelBase>包含XAML中提到的不同ViewModel的所有实例

这里告诉数据模板您的SelectedItem将具有哪种类型的数据类型...
  DataTempaltes将自动为您选择正确的....只需将正确的视图放入正确的数据tempalte ...;)