XAML通知事件未触发,因此不会调用转换器

时间:2018-10-04 14:05:50

标签: c# xaml

我一直在尝试解决此问题,但没有解决任何问题。基本上在我的页面上,我有一个显示,图像或描述的元素。如果正在设置图像,则将显示该图像,否则将显示说明。单击图像可在图像和说明之间切换。

我找到了第一项,并且只有说明,因此可以显示出来。然后,我找到第二个项目,它同时具有图像和说明,因此将显示图像。我单击页面上的元素以显示描述并返回图像。然后,我找到第一个项目,并且在控件上它没有显示任何内容,因为未调用该事件。

我有此资源:

    <Grid.Resources>
        <helpers:ImageFileNameToVisibilityConverter x:Key="ImageImageFileNameToVisibilityConverter" 
                                                    VisibleWhenSet="True" />

        <helpers:ImageFileNameToVisibilityConverter x:Key="DescriptionImageFileNameToVisibilityConverter" 
                                                    VisibleWhenSet="False" />

        <helpers:PutFaceControlSizeConnverter x:Key="PutFaceControlSizeConnverter" 
                                              WidthToHeightRatio="0.66666" />

        <helpers:IncreasDecreaseDecantQuantityConnverter x:Key="IncreasDecantQuantityConnverter"
                                                         PreFix="+" />

        <helpers:IncreasDecreaseDecantQuantityConnverter x:Key="DecreasDecantQuantityConnverter"
                                                         PreFix="-" />

        <converters:PutFaceLocationConverter x:Key="PutFaceLocationConverter" />
        <converters:PutFaceLocationSpanConverter x:Key="PutFaceLocationSpanConverter" />

        <system:Int32 x:Key="PutFaceNum1">1</system:Int32>
        <system:Int32 x:Key="PutFaceNum3">3</system:Int32>

        <DataTemplate x:Key="CalculatorControl">
            <controls:CalculatorControl />
        </DataTemplate>

        <DataTemplate x:Key="DerivativeAndFootPrintDialog">
            <views:DerivativeAndFootPrintDialog />
        </DataTemplate>
    </Grid.Resource>

这是我在xaml页面上进行绑定的地方:

        <StackPanel Orientation="Vertical" 
                    ClipToBounds="True"
                    MaxHeight="250">

            <TextBlock x:Name="derivativeDetailsTextBlock"
                       Text="{Binding Path=Description}"
                       FontSize="20"
                       Margin="2 2 2 2"
                       Visibility="{Binding Path=ImageFileName,
                                            Converter={StaticResource DescriptionImageFileNameToVisibilityConverter}}"/>

            <Image x:Name="derivativeImage"
                   Source="{Binding Path=ImageFileName, IsAsync=True}"
                   Stretch="Uniform"
                   StretchDirection="Both"
                   Margin="2 2 2 2"
                   Height="250"
                   Width="350"
                   Visibility="{Binding Path=ImageFileName,
                                        Converter={StaticResource ImageImageFileNameToVisibilityConverter}}" />
        </StackPanel>

这是转换器

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {

        logger.Info("Entering Convert");

        string filename = value?.ToString();
        logger.Info($"Convert filename is {filename}");

        if (string.IsNullOrWhiteSpace(filename))
        {
            logger.Info($"Convert IsNullOrWhiteSpace VisibleWhenSet {VisibleWhenSet}");
            return VisibleWhenSet
                ? Visibility.Collapsed
                : Visibility.Visible;
        }

        if (File.Exists(filename))
        {
            logger.Info($"Convert file exists VisibleWhenSet {VisibleWhenSet}");
            return VisibleWhenSet
                ? Visibility.Visible
                : Visibility.Collapsed;
        }

        logger.Info($"Convert end VisibleWhenSet {VisibleWhenSet}");

        return VisibleWhenSet
                ? Visibility.Collapsed
                : Visibility.Visible;


        //string filename = value?.ToString();


        //if (File.Exists(filename))
        //{
        //     return VisibleWhenSet
        //        ? Visibility.Visible
        //        : Visibility.Collapsed;
        //}

        //return VisibleWhenSet
        //        ? Visibility.Collapsed
        //        : Visibility.Visible;
    }

    /// <summary>
    /// Converts a value. 
    /// </summary>
    /// <returns>
    /// A converted value. If the method returns null, the valid null value is used.
    /// </returns>
    /// <param name="value">The value that is produced by the binding target.</param><param name="targetType">The type to convert to.</param><param name="parameter">The converter parameter to use.</param><param name="culture">The culture to use in the converter.</param>
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

这些是属性

    public string ImageFileName
    {
        get { return imageFileName; }
        set { Set(nameof(ImageFileName), ref imageFileName, value);
        }
    }

    public string Description
    {
        get { return description; }
        set { Set(nameof(Description), ref description, value);
        }
    }

我试图在属性上使用propertychanged,我试图输入 xaml中的UpdateSourceTrigger = PropertyChanged}

总结一下

  1. 输入数字并找到图片和说明(无图片)
  2. 显示说明
  3. 输入另一个带有图片和描述的数字
  4. 图像按预期显示
  5. 切换控件以显示描述,然后返回图像
  6. 输入第一个数字
  7. 控件上什么都没有显示,但是当我单击它时显示的是描述

0 个答案:

没有答案