仅通过 XAML 将复选框绑定到元素可见性

Posted

技术标签:

【中文标题】仅通过 XAML 将复选框绑定到元素可见性【英文标题】:Binding a checkbox to an elements visibility via XAML only 【发布时间】:2021-10-17 18:34:58 【问题描述】:

我不明白为什么绑定不能这样工作?

<UserControl>
        <StackPanel>
            <CheckBox x:Name="CBTempA"  VerticalAlignment="Center" Margin="10,0,0,0"/>
            <Label VerticalAlignment="Center">Temp A</Label>
        </StackPanel>
        <lvc:CartesianChart>
            <lvc:CartesianChart.Series>
                <lvc:LineSeries Values="Binding TempAValues" Visibility="Binding ElementName=CBTempA, Path=IsChecked, Converter=StaticResource BoolToVisibility"/>
            </lvc:CartesianChart.Series>
        </lvc:CartesianChart>
</UserControl>

【问题讨论】:

【参考方案1】:

转换器BoolToVisibility 将布尔值 (IsChecked) 转换为 System.Windows.Visibility 值。它可能看起来像这样:

public class BoolToVisibilityConverter : IValueConverter

    // value is a parameter from xaml (IsChecked)
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    
        if (value is bool)
        
            return (bool) value ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;
        
        return System.Windows.Visibility.Collapsed;
    

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    
        throw new NotImplementedException();
    

【讨论】:

转换器工作正常,我已经成功地将它与其他元素一起使用。所以这不是问题。 尝试Visibility="Binding Source=x:Reference CBTempA, Path=IsChecked,..." 而不是ElementName。您的图表中可能存在上下文问题。

以上是关于仅通过 XAML 将复选框绑定到元素可见性的主要内容,如果未能解决你的问题,请参考以下文章

剑道与价值的对立可见

将复杂的XAML绑定移动到样式设置器

无法将XAML按钮可见性与C#视图模型专用可见性变量绑定

DataGridTextColumn 可见性绑定

在复选框和文本框上使用相同的功能切换可见性[重复]

WPF绑定复选框bool?