Я пытался решить эту проблему, но ничего не получалось.В основном на моей странице у меня есть элемент, который либо отображает и изображение, либо описание.Если изображение устанавливается, то будет отображаться, что в противном случае будет отображаться описание.Нажав на изображение, вы переключаетесь между изображением и описанием.
Я нахожу первый элемент, и у него есть только описание, которое отображается.Затем я нахожу второй элемент, и у него есть и изображение, и описание, поэтому он отображает изображение.Я нажимаю на элемент на странице, чтобы отобразить описание и вернуться к изображению.Затем я нахожу первый элемент и на элементе управления ничего не отображается, так как событие не вызывается.
У меня есть этот ресурс:
<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
Таким образом, чтобы подвести итог
- Введите число и найдите изображение и описание (без изображения)
- описание отображается
- Введите другой номер с изображением и описанием
- изображение отображается как ожидается
- Переключите элемент управления для отображения описания, а затем вернитесь к изображению
- Сначала введитечисло
- на элементе управления ничего не отображается, но при нажатии на него отображается описание