我一直在尝试解决此问题,但没有解决任何问题。基本上在我的页面上,我有一个显示,图像或描述的元素。如果正在设置图像,则将显示该图像,否则将显示说明。单击图像可在图像和说明之间切换。
我找到了第一项,并且只有说明,因此可以显示出来。然后,我找到第二个项目,它同时具有图像和说明,因此将显示图像。我单击页面上的元素以显示描述并返回图像。然后,我找到第一个项目,并且在控件上它没有显示任何内容,因为未调用该事件。
我有此资源:
<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}
总结一下