Событие XAML Notify не запускается, поэтому конвертер не вызывается - PullRequest
0 голосов
/ 04 октября 2018

Я пытался решить эту проблему, но ничего не получалось.В основном на моей странице у меня есть элемент, который либо отображает и изображение, либо описание.Если изображение устанавливается, то будет отображаться, что в противном случае будет отображаться описание.Нажав на изображение, вы переключаетесь между изображением и описанием.

Я нахожу первый элемент, и у него есть только описание, которое отображается.Затем я нахожу второй элемент, и у него есть и изображение, и описание, поэтому он отображает изображение.Я нажимаю на элемент на странице, чтобы отобразить описание и вернуться к изображению.Затем я нахожу первый элемент и на элементе управления ничего не отображается, так как событие не вызывается.

У меня есть этот ресурс:

    <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);
        }
    }

Я пытался использовать свойства, измененные в свойствах, у меня естьпопытался ввести UpdateSourceTrigger = PropertyChanged} в xaml

Таким образом, чтобы подвести итог

  1. Введите число и найдите изображение и описание (без изображения)
  2. описание отображается
  3. Введите другой номер с изображением и описанием
  4. изображение отображается как ожидается
  5. Переключите элемент управления для отображения описания, а затем вернитесь к изображению
  6. Сначала введитечисло
  7. на элементе управления ничего не отображается, но при нажатии на него отображается описание
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...