c# - WPF 根据数据上下文值隐藏和显示按钮
问题描述
我有 2 个按钮,如下所示:
<Button x:Name="button1" Content="Button 1"/>
<Button x:Name="button2" Content="Button 2"/>
我在我的 DataContext 中有一个名为 IsButton1Visible 的 bool 变量,如果 IsButton1Visible == true,我希望 button1 可见,并且 button2 折叠,如果 IsButton1Visible == false,则 button1 折叠,并且 button2 可见。是否可以在不使用样式或代码隐藏的情况下完成此操作?XAML 答案主要是我正在寻找的。
解决方案
为什么不想使用样式?这是迄今为止最简单的方法。
一种没有样式的方法是通过布尔到可见性转换器,即这样的:
public class BooleanToVisibilityConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return false;
var invert = (parameter == null) ? false : Boolean.Parse(parameter.ToString());
if ((Boolean)value ^ invert)
return Visibility.Visible;
else
return Visibility.Hidden;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
然后你会像这样使用它:
<Button x:Name="button1" Content="Button 1" Visibility="{Binding IsButton1Visible, Converter={StaticResource BooleanToVisibilityConverter}}" />
<Button x:Name="button2" Content="Button 2" Visibility="{Binding IsButton1Visible, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=true}" />
不过说真的,只需在样式中使用 DataTrigger 即可更改可见性,或者更好的是,模板化整个控件。当必须在视图和视图模型层之间转换数据时,您使用转换器,当它是单向时,您使用数据触发器。
推荐阅读
- php - 进入开发模式并在 Magento 2 中更新插件后出现致命错误“无效文档”
- html - 使用 css 动态更改内容位置
- javascript - 如何检测第一次安装 Chrome 扩展程序的时间
- ruby-on-rails - 在 Rails 中将 css 类添加到某个控制器的最佳方法是什么?
- php - PHP - 卷曲并获取元标记功能
- assembly - 无法计算 TASM 中的字符串(数组)长度。循环结束工作
- python - 有什么东西可以作为矢量化回测平台吗?
- python - 输出显示像 Atom 或 Variable 这样的类型,而不是变量的实际值(python 中的 pyswip)
- c - 在两个模块之间共享 sizeof(array)
- javascript - 道具在单次刷新中更新 3 次