【问题标题】:Visibility Converter Binding Not Working可见性转换器绑定不起作用
【发布时间】:2017-11-09 04:21:43
【问题描述】:

我有一个 DataGrid 的可见性转换器,当网格的项目源为空时,它应该隐藏网格。项目源是窗口类的属性。

这里是窗口的部分 XAML - 窗口和可见性转换器定义和数据网格:

窗口:

<Window x:Name="DiagramWindow"
    x:Class="FabricAnalyzer.FabricDiagram"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:FabricAnalyzer"

    xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
    mc:Ignorable="d"
    Title="FabricDiagram"
    DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Window.Resources>

    <ResourceDictionary>
        <local:SwitchThumbColorConverter x:Key="SwitchThumbColor"/>
        <local:PortThumbColorConverter x:Key="PortThumbColor"/>
        <local:StringLengthVisiblityConverter x:Key="VisConverter"/>
        <local:PortListVisiblityConverter x:Key="PortVisConverter"/>

数据网格:

<Grid Name="FabricGrid">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <DataGrid Name="SVCPortDataGrid" Grid.Column="0" Width="Auto"
                   Visibility="{Binding Path=PortList, Converter=
    {StaticResource PortVisConverter}}"
                      AutoGenerateColumns="False">

这是它应该绑定到的属性和 VisibilityConverter 的代码。这个想法是,如果 PortList 为空 - 默认情况下它将是 - DataGrid 应该保持折叠状态。我已经验证了 PortList 在我想要的时候是空的。

 public partial class FabricDiagram : Window
{

    public List<PortResult> PortList = null;

最后是可见性转换器。我已经在调试器中验证它没有被调用。

 public class PortListVisiblityConverter : IValueConverter
{

    public Object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null )
        {
            return Visibility.Collapsed;
        }
        else
        {
            return Visibility.Visible;
        }
    }

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

我已尝试将 XAML 更改为此绑定

Visibility="{Binding PortList, Converter={StaticResource PortVisConverter}}"

【问题讨论】:

    标签: c# xaml


    【解决方案1】:

    您的绑定失败,因此转换器永远不会运行。

    public List<PortResult> PortList = null; 
    

    声明一个字段,你只能绑定到properties。改为:

    public List<PortResult> PortList { get; set; } = null;
    

    将解决您的第一个问题;如果您希望对该属性的更改传播到 UI,则需要使用 INotifyPropertyChanged

    顺便说一句,如果您在运行时查看输出窗口并看到System.Data 异常,您可能会发现这一点。调试绑定问题的最简单方法:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 2019-01-03
      • 2012-11-23
      • 2017-04-19
      • 2014-09-05
      相关资源
      最近更新 更多