首页 > 解决方案 > 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视图模型,以便我的视图模型数组中的每个项目都有一个。

标签: c#xamluwptelerik

解决方案


从这个文档中,它说明我们可以用它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);

推荐阅读