ray*_*0nd 115 c# data-binding wpf xaml
如何将按钮的可见性绑定到ViewModel中的bool值?
<Button Height="50" Width="50" Style="{StaticResource MyButtonStyle}"
Command="{Binding SmallDisp}" CommandParameter="{Binding}" Cursor="Hand"
Visibility="{Binding Path=AdvancedFormat}" />
Run Code Online (Sandbox Code Playgroud)
dle*_*lev 193
假设AdvancedFormat是a bool,你需要声明并使用BooleanToVisibilityConverter:
<!-- In your resources section of the XAML -->
<BooleanToVisibilityConverter x:Key="BoolToVis" />
<!-- In your Button declaration -->
<Button
Height="50" Width="50"
Style="{StaticResource MyButtonStyle}"
Command="{Binding SmallDisp}" CommandParameter="{Binding}"
Cursor="Hand" Visibility="{Binding Path=AdvancedFormat, Converter={StaticResource BoolToVis}}"/>
Run Code Online (Sandbox Code Playgroud)
注意添加Converter={StaticResource BoolToVis}.
在使用MVVM时,这是一种非常常见的模式.从理论上讲,你可以自己在ViewModel属性上进行转换(即只是将属性本身设置为类型Visibility)虽然我宁愿不这样做,因为现在你正在搞乱关注点的分离.项目的可见性应该完全取决于View.
Rob*_*ney 93
第三种方法不需要转换器或更改视图模型:使用样式:
<Style TargetType="Button">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsVisible}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
我倾向于喜欢这种技术,因为我在许多情况下使用它,我绑定的不是布尔值 - 例如,只有当它DataContext不为空时才显示元素,或者实现多状态显示,其中不同的布局基于在视图模型中设置枚举.
Ber*_*rty 10
c#中的2路转换从布尔值到可见性
using System;
using System.Windows;
using System.Windows.Data;
namespace FaceTheWall.converters
{
class BooleanToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is Boolean && (bool)value)
{
return Visibility.Visible;
}
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is Visibility && (Visibility)value == Visibility.Visible)
{
return true;
}
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
自 Windows 10 15063 起
自 Windows 10 build 15063 以来,有一个名为“隐式可见性转换”的新功能,可以将可见性原生绑定到 bool 值 - 不再需要使用转换器。
我的代码(假设使用 MVVM,以及模板 10):
<!-- In XAML -->
<StackPanel x:Name="Msg_StackPanel" Visibility="{x:Bind ViewModel.ShowInlineHelp}" Orientation="Horizontal" Margin="0,24,0,0">
<TextBlock Text="Frosty the snowman was a jolly happy soul" Margin="0,0,8,0"/>
<SymbolIcon Symbol="OutlineStar "/>
<TextBlock Text="With a corncob pipe and a button nose" Margin="8,0,0,0"/>
</StackPanel>
<!-- in companion View-Model -->
public bool ShowInlineHelp // using T10 SettingsService
{
get { return (_settings.ShowInlineHelp); }
set { _settings.ShowInlineHelp = !value; base.RaisePropertyChanged(); }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
141053 次 |
| 最近记录: |