C# WPF中的多个Bool-to-Visibility转换器
我是WPF的新手。我正在编写基于ToggleSwitch的演示的小应用程序,可在Codeplex上获得: 基本上有4个单选按钮与4个xaml文件绑定(正如我在上面写的链接中的演示)。让我们称它们为Base1.xml、Base2.xml等 然后我想对其中一个文件做同样的事情。 我为3个xamls-Sub1.xml Sub2.xml Sub3.xml添加了Base2.xml 3单选按钮。我复制了逻辑,然后遇到了问题。 其中一个Subx.xml始终可见 我认为这是一个可见/折叠的问题,它应该是可见/隐藏的,所以我尝试通过此链接解决此问题: 但它不起作用 以下是我的主要xaml:C# WPF中的多个Bool-to-Visibility转换器,c#,wpf,xaml,C#,Wpf,Xaml,我是WPF的新手。我正在编写基于ToggleSwitch的演示的小应用程序,可在Codeplex上获得: 基本上有4个单选按钮与4个xaml文件绑定(正如我在上面写的链接中的演示)。让我们称它们为Base1.xml、Base2.xml等 然后我想对其中一个文件做同样的事情。 我为3个xamls-Sub1.xml Sub2.xml Sub3.xml添加了Base2.xml 3单选按钮。我复制了逻辑,然后遇到了问题。 其中一个Subx.xml始终可见 我认为这是一个可见/折叠的问题,它应该是可见/隐
<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}}"/>
你能告诉我怎么解决我的问题吗
顺便说一句,你不必使用转换器。可以直接绑定到visibility属性,该属性可以在视图上公开,也可以在使用MVVM时绑定到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
的视图
请注意它是如何使用
INotifyPropertyChange
OnPropertyChanged
方法向世界宣布更改的。我在我的博客上提供了MVVM概述:
因此,除非您将单选按钮绑定到单个属性(可能使用您自己的EnumToBooleanConverter),或者将单选按钮分配给整个屏幕上具有唯一组名的组,否则您可以一次选中多个单选按钮。您的“IsChecked”需要绑定到某个内容。请更新BooltVisibilityConverter的代码。您的代码似乎很好,应该可以正常工作。对不起,我发布为未登录@Vishakh Babu-我重新命名了我的链接,我犯了一个错误,但这部分现在和过去都正常工作。我的子链接有问题,请更新BooltVisibilityConverter的代码。您的代码似乎很好,它应该可以工作,因为expectedIt仍然无法工作。我想我必须读更多关于WPF的书,也许还有更多关于MVVM的书。谢谢。也许你的代码还有其他问题。无论如何,代码是完美的!