[英]Multiple Bool to Visibility Converter in WPF
我对 WPF 很陌生。 我正在编写基于 Codeplex 上 ToggleSwitch Demo 的小应用程序: https ://toggleswitch.codeplex.com/
基本上有 4 个单选按钮与 4 个 xaml 文件绑定(就像我在上面写的链接的演示中一样)。 我们称它们为 Base1.xml、Base2.xml 等。
然后我想为这些文件之一做同样的事情。 我为 3 个 xamls 放入了 Base2.xml 3 个单选按钮 - Sub1.xml Sub2.xml Sub3.xml。 我复制了逻辑,然后遇到了问题。 Subx.xml 之一始终可见。
我认为这是可见/折叠的问题,它应该是可见/隐藏的,所以我尝试从这个链接解决: http : //www.rhyous.com/2011/02/22/binding-visibility-to-a-bool- wpf中的价值/
但它不起作用...
这是我的主要 xaml:
<ResourceDictionary>
[...]
<BooleanToVisibilityConverter x:Key="VisibilityConverter"/>
</ResourceDictionary>
<Grid>
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel x:Name="LinksStackPanel" Orientation="Horizontal">
<RadioButton Style="{StaticResource LinkStyle}" x:Name="VLink1" Content="LINK1" Margin="0,0,25,0" IsChecked="True" />
<RadioButton Style="{StaticResource LinkStyle}" x:Name="VLink2" Content="LINK2" Margin="0,0,25,0"/>
<RadioButton Style="{StaticResource LinkStyle}" x:Name="VLink3" Content="LINK3" Margin="0,0,25,0"/>
<RadioButton Style="{StaticResource LinkStyle}" x:Name="VLink4" Content="LINK4" Margin="0,0,25,0"/>
</StackPanel>
<Grid Grid.Row="1" Margin="0,10,0,0">
<MyApp:Link1 Visibility="{Binding ElementName=Link1, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/>
<MyApp:Link2 Visibility="{Binding ElementName=Link2, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/>
<MyApp:Link3 Visibility="{Binding ElementName=Link3, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/>
<MyApp:Link4 Visibility="{Binding ElementName=Link4, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/>
</Grid>
</Grid>
</Grid>
这是我的 Link2.xaml:
<UserControl.Resources>
<ResourceDictionary>
[...]
<BooleanToVisibilityConverter x:Key="VisibilityConverter"/>
</ResourceDictionary>
</UserControl.Resources>
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel x:Name="LinksStackPanel" Orientation="Horizontal" Margin="0,0,0,0" >
<RadioButton Style="{StaticResource LinkStyle}" x:Name="vSubLink1" Content="SubLink1" Margin="25,0,25,0"/>
<RadioButton Style="{StaticResource LinkStyle}" x:Name="vSubLink2" Content="SubLink2" Margin="0,0,25,0"/>
<RadioButton Style="{StaticResource LinkStyle}" x:Name="vSubLink3" Content="SubLink3" Margin="0,0,25,0"/>
</StackPanel>
<Grid Grid.Row="1" Margin="0,10,0,0">
<MyApp:SubLink1 Visibility="{Binding ElementName=vSubLink1, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/>
<MyApp:SubLink2 Visibility="{Binding ElementName=vSubLink2, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/>
<MyApp:SubLink3 Visibility="{Binding ElementName=vSubLink3, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/>
</Grid>
</Grid>
你能告诉我如何解决我的问题吗?
绑定中元素名称错误! 尝试下面的代码更改,如果有任何问题,请恢复。
<MyApp:Link1 Visibility="{Binding ElementName=VLink1, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/>
<MyApp:Link2 Visibility="{Binding ElementName=VLink2, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/>
<MyApp:Link3 Visibility="{Binding ElementName=VLink3, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/>
<MyApp:Link4 Visibility="{Binding ElementName=VLink4, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/>
你能告诉我如何解决我的问题吗?
顺便说一句……您不一定必须使用转换器。 可以直接绑定到可见性属性,或者在视图上公开,或者如果您使用的是 MVVM,则为 VM。 例如我在 VM 上执行特定逻辑的位置:
public Visibility IsSendAvailable
{
get { return CanSend ? Visibility.Visible : Visibility.Collapsed; }
set { _IsSendAvailable = value; OnPropertyChanged("IsSendAvailable"); }
}
然后绑定在您的 Xaml 中,例如
<MyApp:SubLink1 Visibility="{Binding IsSendAvailable}"/>
假设页面的 datacontext设置为 VM 或具有IsSendAvailable
属性的IsSendAvailable
。
请注意它如何使用INotifyPropertyChange
OnPropertyChanged
方法向世界宣布更改。 我在我的博客上提供了 MVVM 概述:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.