TreeView 连接到 MVVM 中的多重可见性(ContentControl/ListView/etc..)

TreeView connect to Multiple Visibility (ContentControl/ListView/etc..) in MVVM

我有一个 TreeView 连接到一个 ListView 和一个 ContentControl。当我们单击一个节点时,会将可见性设置为隐藏或可见。我已经编写了它并且它正在工作,但是它在 MVVM 上,所以我想转换它,但我不知道如何转换。

我已有的代码:

private void TreeView_OnSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            String tmp = ((TreeViewItem)e.NewValue).Header.ToString();
            Console.Write(tmp);
            if (tmp == "Lecteur")
            {
                Console.Write("Lecteur\n");
                MediaPlayer.Visibility = Visibility.Visible;
                Bibliotheque.Visibility = Visibility.Hidden;
            }
            else if (tmp == "Bibliotheque")
            {
                Console.Write("Bibliotheque\n");
                MediaPlayer.Visibility = Visibility.Hidden;
                Bibliotheque.Visibility = Visibility.Visible;
            }
        }

如果您有想法,请绑定 ContentControl/ListView 或其他...

的所有可见性

这可以在 UI 中使用触发器完成,您不需要在代码隐藏或 ViewModel 中添加任何额外的逻辑

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <TreeView Grid.Row="0" x:Name="TrV">
        <TreeViewItem Header="Lecteur"/>
        <TreeViewItem Header="Bibliotheque"/>                   
    </TreeView>
    <ListView Grid.Row="1">
        <ListView.Style>
            <Style TargetType="ListView">
                <Setter Property="Visibility" Value="Visible"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=TrV,Path=SelectedItem.Header}">
                        <DataTrigger.Value>
                            <system:String>Lecteur</system:String>
                        </DataTrigger.Value>
                        <Setter Property="Visibility" Value="Hidden"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ListView.Style>
        <ListViewItem Content="Lv_One"/>
        <ListViewItem Content="Lv_Two"/>
        <ListViewItem Content="Lv_Three"/>
    </ListView>
    <MediaElement Grid.Row="2" >
        <MediaElement.Style>
            <Style TargetType="MediaElement">
                <Setter Property="Visibility" Value="Visible"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=TrV,Path=SelectedItem.Header}">
                        <DataTrigger.Value>
                            <system:String>Bibliotheque</system:String>
                        </DataTrigger.Value>
                        <Setter Property="Visibility" Value="Hidden"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </MediaElement.Style>
    </MediaElement>       
</Grid>