DataTemplate 不改变图像
DataTemplate don't change Image
<DataTemplate>
<Image Name="ServerImageSetter" Source="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test1.svg}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding ServerKindTrigger}" Value="0">
<Setter TargetName="ServerImageSetter" Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test2.svg}"/>
</DataTrigger>
<DataTrigger Binding="{Binding ServerKindTrigger}" Value="1">
<Setter TargetName="ServerImageSetter" Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test3.svg}"/>
</DataTrigger>
<DataTrigger Binding="{Binding ServerKindTrigger}" Value="2">
<Setter TargetName="ServerImageSetter" Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test3.svg}"/>
</DataTrigger>
</DataTemplate
在我的 C# 代码中,我将值的类型切换为 0-2,这应该会改变图像。但是更改不起作用。
public int ServerKindTrigger
{
get { return _serverKindTrigger; }
set { _serverKindTrigger = value;
RaisePropertyChanged();
}
}
//Here I switch my serverkind and wanna change the image value
switch (_serverKind)
{
case Servers.test: _serverKindTrigger = 0;
您正在更改本地字段而不是 属性,这就是它没有触发绑定更新的原因。
更改您的 switch/case 分配以分配 ServerKindTrigger 属性。
switch (_serverKind)
{
case Servers.test: ServerKindTrigger = 0;
除了设置支持字段 _serverKindTrigger
而不是 属性 ServerKindTrigger
,因此不会触发 PropertyChangedEvent,您直接设置图像的源 属性控制:
<Image Source="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test1.svg}"/>
这个所谓的本地值总是比 DataTriggers 中的 Setter 的值具有更高的优先级。有关参考,请参阅 Dependency Property Value Precedence。
将您的 XAML 更改为:
<Image>
<Image.Style>
<Style TargetType="Image">
<Setter Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test1.svg}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ServerKindTrigger}" Value="0">
<Setter Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test2.svg}"/>
</DataTrigger>
<DataTrigger Binding="{Binding ServerKindTrigger}" Value="1">
<Setter Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test3.svg}"/>
</DataTrigger>
<DataTrigger Binding="{Binding ServerKindTrigger}" Value="2">
<Setter Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test3.svg}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<DataTemplate>
<Image Name="ServerImageSetter" Source="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test1.svg}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding ServerKindTrigger}" Value="0">
<Setter TargetName="ServerImageSetter" Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test2.svg}"/>
</DataTrigger>
<DataTrigger Binding="{Binding ServerKindTrigger}" Value="1">
<Setter TargetName="ServerImageSetter" Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test3.svg}"/>
</DataTrigger>
<DataTrigger Binding="{Binding ServerKindTrigger}" Value="2">
<Setter TargetName="ServerImageSetter" Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test3.svg}"/>
</DataTrigger>
</DataTemplate
在我的 C# 代码中,我将值的类型切换为 0-2,这应该会改变图像。但是更改不起作用。
public int ServerKindTrigger
{
get { return _serverKindTrigger; }
set { _serverKindTrigger = value;
RaisePropertyChanged();
}
}
//Here I switch my serverkind and wanna change the image value
switch (_serverKind)
{
case Servers.test: _serverKindTrigger = 0;
您正在更改本地字段而不是 属性,这就是它没有触发绑定更新的原因。
更改您的 switch/case 分配以分配 ServerKindTrigger 属性。
switch (_serverKind)
{
case Servers.test: ServerKindTrigger = 0;
除了设置支持字段 _serverKindTrigger
而不是 属性 ServerKindTrigger
,因此不会触发 PropertyChangedEvent,您直接设置图像的源 属性控制:
<Image Source="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test1.svg}"/>
这个所谓的本地值总是比 DataTriggers 中的 Setter 的值具有更高的优先级。有关参考,请参阅 Dependency Property Value Precedence。
将您的 XAML 更改为:
<Image>
<Image.Style>
<Style TargetType="Image">
<Setter Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test1.svg}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ServerKindTrigger}" Value="0">
<Setter Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test2.svg}"/>
</DataTrigger>
<DataTrigger Binding="{Binding ServerKindTrigger}" Value="1">
<Setter Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test3.svg}"/>
</DataTrigger>
<DataTrigger Binding="{Binding ServerKindTrigger}" Value="2">
<Setter Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test3.svg}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>