c# - XAML 将列表转换为控件列表
问题描述
我正在使用 Telerik 的 UWP UI 来绘制图表。 https://github.com/telerik/UI-For-UWP
我正在尝试数据绑定注释并动态显示它们。
我已经绑定了一个这样的注释:
看法
<chart:RadCartesianChart x:Name="OhlcChart" PaletteName="DefaultLightSelected" Grid.Row="1">
<chart:RadCartesianChart.VerticalAxis>
<chart:LinearAxis/>
</chart:RadCartesianChart.VerticalAxis>
<chart:RadCartesianChart.HorizontalAxis>
<chart:DateTimeCategoricalAxis LabelFormat="{}{0,0:dd/MM}"/>
</chart:RadCartesianChart.HorizontalAxis>
<chart:RadCartesianChart.Annotations>
<chart:CartesianCustomLineAnnotation
HorizontalFrom="{x:Bind ViewModel.Annotations[0].Date1}"
VerticalFrom="{x:Bind ViewModel.Annotations[0].Value1}"
HorizontalTo="{x:Bind ViewModel.Annotations[0].Date2}"
VerticalTo="{x:Bind ViewModel.Annotations[0].Value2}"
/>
</chart:RadCartesianChart.Annotations>
</chart:RadCartesianChart.Annotations>
</chart:RadCartesianChart>
查看模型
public class ChartViewModel : ViewModelBase
{
public class DataItem
{
public DateTime Date1 { get; set; }
public double Value1 { get; set; }
public DateTime Date2 { get; set; }
public double Value2 { get; set; }
}
public DataItem [] Annotations { get; }
}
如何绑定可枚举的注释,如下所示:
public class ChartViewModel : ViewModelBase
{
public class DataItem
{
public DateTime Date1 { get; set; }
public double Value1 { get; set; }
public DateTime Date2 { get; set; }
public double Value2 { get; set; }
}
public DataItem [] Annotations { get; }
}
RadCartesianChart.Annotations
没有像 ListView 和 GridView 这样的 ItemTemplate 属性。
我想绑定我的CartesianCustomLineAnnotation
视图模型,以便我的视图模型数组中的每个项目都有一个。
解决方案
从这个文档中,它说明我们可以用它RadCartesianChart.AnnotationsProvider
来实现绑定。但它只能在 WPF 而不是 UWP 中使用。所以如果要数据绑定注解,似乎只能在xaml或者code-behind中手动添加CartesianCustomLineAnnotation。
更新:
如果 ViewModel 实现了 INotifyProperty,您可以在代码隐藏中手动进行绑定。会有点复杂。我以VerticalFrom为例。
ChartViewModel.DataItem item1 = new ChartViewModel.DataItem();
item1.Value1 = 10;
CartesianCustomLineAnnotation c1 = new CartesianCustomLineAnnotation();
c1.Stroke = new SolidColorBrush(Colors.Red);
c1.StrokeThickness = 2;
Binding myBinding = new Binding();
myBinding.Source = item1;
myBinding.Path = new PropertyPath("Value1");
myBinding.Mode = BindingMode.OneWay;
BindingOperations.SetBinding(c1, CartesianCustomLineAnnotation.VerticalFromProperty, myBinding);
OhlcChart.Annotations.Add(c1);
推荐阅读
- xcode - Xcode 通用项目索引
- neo4j - Graphenedb 触发问题 (https://app.graphenedb.com/)
- amazon-s3 - 发出 S3 GET 请求时收到 400 Bad request
- php - PHP 类型化返回混合内容
- google-cloud-platform - Google Cloud 虚拟实例:Chrome 远程桌面显示远程计算机离线,但 Google Cloud Platform 显示实例正在运行
- ios - 根据 UIView 和 UITextView 的整体大小动态调整 UIScrollView contentSize
- apache-spark - 具有 nutch 数据的本地模式下的 Apache Mahout 与 Apache Spark
- java - Spring Boot 控制器不重定向
- python-3.x - pytesseract 无法从图像中识别复杂的数学公式
- tensorflow - 在 tf.data.Dataset.map 中使用 tf.keras.applications.resnet50.preprocess_input 时出错