【问题标题】:DataTemplate and WrapPanel visibilityDataTemplate 和 WrapPanel 可见性
【发布时间】:2013-12-20 12:05:26
【问题描述】:

我收到此错误:

在“System.Windows.Markup.StaticResourceHolder”上提供值抛出了一个 例外。

使用 xaml 代码:

 <WrapPanel Orientation="Horizontal" Grid.Row="0" >
    <WrapPanel.Visibility>
      <Binding Path="setVisible" Converter="{StaticResource BooleanToVisibilityConverter}" ConverterParameter="{Binding setVisible}"/>
    </WrapPanel.Visibility>
                                         //textblocks goes here
  </WrapPanel>

和类:

public class dataTemplate_xItem
    {
        (...)
        public bool setVisible { get; set; }
        public sealed class BooleanToVisibilityConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                var flag = false;
                if (value is bool)
                {
                    flag = (bool)value;
                }
                else if (value is bool?)
                {
                    var nullable = (bool?)value;
                    flag = nullable.GetValueOrDefault();
                }
                if (parameter != null)
                {
                    if (bool.Parse((string)parameter))
                    {
                        flag = !flag;
                    }
                }
                if (flag)
                {
                    return Visibility.Visible;
                }
                else
                {
                    return Visibility.Collapsed;
                }
            }

            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                var back = ((value is Visibility) && (((Visibility)value) == Visibility.Visible));
                if (parameter != null)
                {
                    if ((bool)parameter)
                    {
                        back = !back;
                    }
                }
                return back;
            }
        }
    }

在我将项目添加到 ListView 之前,检查

if(myValue != 0)
    newItem.setVisible = true;
else
    newItem.setVisible = false;

知道出了什么问题吗? :)

【问题讨论】:

  • 我看到至少一件事是错误的,绑定ConverterParameter。详情请见this answer。

标签: c# wpf datatemplate wrappanel


【解决方案1】:

icebat 是正确的。 ConverterParameter 不是 DependencyProperty,因此不能绑定。查看您的 xaml,您不需要 ConverterParameter。您也不需要绑定表达式的扩展标记。你的 xaml 可以简单地是

<UserControl.Resources>
    <BooleanToVisibilityConverter x:Key="Boolean2Visibility" />
</UserControl.Resources>

<WrapPanel Orientation="Horizontal" Grid.Row="0" Visibility="{Binding Path=setVisible, Converter={StaticResource Boolean2Visibility}}" />

此代码假定您在 UserControl 中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 2011-11-27
    相关资源
    最近更新 更多