我有一个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("Lecteurn");
MediaPlayer.Visibility = Visibility.Visible;
Bibliotheque.Visibility = Visibility.Hidden;
}
else if (tmp == "Bibliotheque")
{
Console.Write("Bibliothequen");
MediaPlayer.Visibility = Visibility.Hidden;
Bibliotheque.Visibility = Visibility.Visible;
}
}
如果你有一个想法,绑定ContentControl/ListView或其他的所有Visibility。。。
这可以在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>