我已经在XAML中配置了一个Oxyplot,使用的是Plot而不是PlotView。(我使用单独的属性绑定,而不是完整的PlotModel绑定。)
这个配置使用了6个LineAnnotations,我希望可以选择性地显示或隐藏它们。
我使用了绑定来连接LineAnnotations的Visibility属性和ViewModel中的属性。这些属性是布尔型的,我使用了转换器将值转换为Visibility.Collapsed或Visibility.Visible(但我也可以定义一个类型为Visibility的属性)。
但是这并没有生效。LineAnnotations总是可见的。
事实上,我认为LineAnnotation的Visibility属性根本不起作用。
有人能证实这个问题吗?
是否有一种替代方法可以基于ViewModel中的属性来显示或隐藏LineAnnotations?
我更倾向于坚持使用XAML配置,而不是在代码中添加和删除LineAnnotations。
更新
如请求所示,以下是一些代码:
XAML
类型转换器
这个配置使用了6个LineAnnotations,我希望可以选择性地显示或隐藏它们。
我使用了绑定来连接LineAnnotations的Visibility属性和ViewModel中的属性。这些属性是布尔型的,我使用了转换器将值转换为Visibility.Collapsed或Visibility.Visible(但我也可以定义一个类型为Visibility的属性)。
但是这并没有生效。LineAnnotations总是可见的。
事实上,我认为LineAnnotation的Visibility属性根本不起作用。
有人能证实这个问题吗?
是否有一种替代方法可以基于ViewModel中的属性来显示或隐藏LineAnnotations?
我更倾向于坚持使用XAML配置,而不是在代码中添加和删除LineAnnotations。
更新
如请求所示,以下是一些代码:
XAML
<oxy:Plot Grid.Row="1">
<oxy:Plot.Axes>
<oxy:LinearAxis Key="yAxis"
Position="{Binding Path=XAxisInverted, Converter={StaticResource BoolToAxisPosition_fl_tr}}"
Minimum="{Binding YAxis_Min}"
Maximum="{Binding YAxis_Max}"
MajorGridlineStyle="Dot"
MajorGridlineColor="LightGray"
Title="Velocity [km/h]" />
<oxy:LinearAxis Key="xAxis"
Position="Bottom"
Minimum="{Binding XAxisNumericMin}"
Maximum="{Binding XAxisNumericMax}"
StartPosition="{Binding Path=XAxisInverted, Converter={StaticResource BoolToInt_f0_t1}}"
EndPosition="{Binding Path=XAxisInverted, Converter={StaticResource BoolToInt_f1_t0}}"
MajorGridlineStyle="Dot"
MajorGridlineColor="LightGray"
Title="Position [m]" />
</oxy:Plot.Axes>
<oxy:Plot.Series>
<oxy:LineSeries ItemsSource="{Binding PointsRef1}"
DataFieldX="X"
DataFieldY="Y"
StrokeThickness="1"
MarkerSize="0"
LineStyle="Solid"
Color="DarkGray"
MarkerType="None"/>
<oxy:LineSeries ItemsSource="{Binding PointsRef2}"
DataFieldX="X"
DataFieldY="Y"
StrokeThickness="1"
MarkerSize="0"
LineStyle="Solid"
Color="DarkGray"
MarkerType="None"/>
<oxy:LineSeries ItemsSource="{Binding PointsBlack}"
DataFieldX="X"
DataFieldY="Y"
StrokeThickness="1"
MarkerSize="0"
LineStyle="Solid"
Color="Black"
MarkerType="None"/>
<oxy:LineSeries ItemsSource="{Binding PointsRed}"
DataFieldX="X"
DataFieldY="Y"
StrokeThickness="1"
MarkerSize="0"
LineStyle="Solid"
Color="Red"
MarkerType="None"/>
<oxy:LineSeries ItemsSource="{Binding PointsBlue}"
DataFieldX="X"
DataFieldY="Y"
StrokeThickness="1"
MarkerSize="0"
LineStyle="Solid"
Color="Blue"
MarkerType="None"/>
<oxy:LineSeries ItemsSource="{Binding PointsGreen}"
DataFieldX="X"
DataFieldY="Y"
StrokeThickness="1"
MarkerSize="0"
LineStyle="Solid"
Color="Green"
MarkerType="None"/>
</oxy:Plot.Series>
<oxy:Plot.Annotations>
<oxy:LineAnnotation x:Name="BrakePosRear" Type="Vertical" Color="{Binding BrakePosRear_1_Color}" Visibility="{Binding Path=BrakePosRear_1_Enabled, Converter={StaticResource BoolToVisibility}}" X="{Binding BrakePosRear_1_Value}" local:AnnotationDragableBehavior.IsDragable="True" />
<oxy:LineAnnotation x:Name="BrakePosFront" Type="Vertical" Color="{Binding BrakePosFront_1_Color}" Visibility="{Binding Path=BrakePosFront_1_Enabled, Converter={StaticResource BoolToVisibility}}" X="{Binding BrakePosFront_1_Value}" local:AnnotationDragableBehavior.IsDragable="True" />
<oxy:LineAnnotation x:Name="RefPos" Type="Vertical" Color="{Binding RefPos_1_Color}" Visibility="{Binding Path=RefPos_1_Enabled, Converter={StaticResource BoolToVisibility}}" X="{Binding RefPos_1_Value}" local:AnnotationDragableBehavior.IsDragable="True" />
<oxy:LineAnnotation x:Name="BrakePosRear2" Type="Vertical" Color="{Binding BrakePosRear_2_Color}" Visibility="{Binding Path=BrakePosRear_2_Enabled, Converter={StaticResource BoolToVisibility}}" X="{Binding BrakePosRear_2_Value}" local:AnnotationDragableBehavior.IsDragable="True" />
<oxy:LineAnnotation x:Name="BrakePosFront2" Type="Vertical" Color="{Binding BrakePosFront_2_Color}" Visibility="{Binding Path=BrakePosFront_2_Enabled, Converter={StaticResource BoolToVisibility}}" X="{Binding BrakePosFront_2_Value}" local:AnnotationDragableBehavior.IsDragable="True" />
<oxy:LineAnnotation x:Name="RefPos2" Type="Vertical" Color="{Binding RefPos_2_Color}" Visibility="{Binding Path=RefPos_2_Enabled, Converter={StaticResource BoolToVisibility}}" X="{Binding RefPos_2_Value}" local:AnnotationDragableBehavior.IsDragable="True" />
</oxy:Plot.Annotations>
</oxy:Plot>
类型转换器
class BoolToVisibility : IValueConverter
{
public object Convert( object value, Type targetType, object parameter, CultureInfo culture )
{
return System.Convert.ToBoolean ( value ) ? Visibility.Visible : Visibility.Collapsed ;
}
public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture )
{
throw new NotImplementedException ();
}
}
我还有一个附加行为来处理LineAnnotation上的鼠标事件(非常酷),但我认为这不相关。
我也尝试在XAML中直接指定Visibility="Collapsed"(和"Hidden"),但没有效果。
即使绑定不起作用,在XAML中硬编码该值应该也能起作用。
LineAnnotation
实体了,您甚至可能无法检查Visibility
属性的值。所有这些都已经消失了,分解成了基本组件,如Polyline
、Path
、TextBlock
等。 - jsanalytics