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>
我有一个 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>