我在用户控件中有一个图表。由于我想在应用程序中使用多个图表,我需要为每个用户控件实例设置一系列标题。它到目前为止工作正常,但我无法将变量(例如seriesTitle)绑定到用户控件xaml中的目标。
请参阅以下代码:
使用MainPage.xaml中的用户控件:
<local:ColumnInputChart
Name="Chart1"
seriesTitle="Diuretics"
seriesItemId="1"
getServiceUrl="/Service/MedIntake/1"
postServiceUrl="/Service/MedIntake/"
/>
例如seriesTitle是用户控件中的public var。
public partial class ColumnInputChart : UserControl
{
public String seriesItemId { get; set; }
public String getServiceUrl { get; set; }
public String postServiceUrl { get; set; }
public String seriesTitle { get; set; }
在ColumnInputChart.xaml中我试图将seriesTitle绑定到一个系列的Title,这不起作用。传奇有一个空头衔。我是否需要以编程方式设置标题?
<chartingToolkit:AreaSeries ItemsSource="{Binding}"
DependentValuePath="Dpd"
IndependentValuePath="Date"
Title="{Binding seriesTitle, Mode=TwoWay}" />
我也意识到,在构建用户控件期间,我的用户控件在MainPage.xaml中设置的自定义公共变量尚未设置。但是,一旦Page_Loaded事件被触发,它们就可用了。
请参阅代码中的代码和注释,以澄清我的意思:
public String seriesItemId { get; set; }
public String getServiceUrl { get; set; }
public String postServiceUrl { get; set; }
public String seriesTitle { get; set; }
public ColumnInputChart()
{
// seriesItemId and so on are null here.
InitializeComponent();
Loaded += new RoutedEventHandler(Page_Loaded);
// and null here.
}
void Page_Loaded(object sender, RoutedEventArgs e) {
// seriesItemId, seriesTitle ... have now the
// value form MainPage.xaml
}
这是我的用户控件的图表代码:
<chartingToolkit:Chart Height="160" x:Name="Chart" BorderThickness="0" Style="{StaticResource MyChartStyle}">
<chartingToolkit:Chart.Axes>
<chartingToolkit:DateTimeAxis Orientation="X">
<chartingToolkit:DateTimeAxis.AxisLabelStyle>
<Style TargetType="chartingToolkit:DateTimeAxisLabel">
<Setter Property="StringFormat" Value="{}{0:d/M/yyyy}"/>
</Style>
</chartingToolkit:DateTimeAxis.AxisLabelStyle>
</chartingToolkit:DateTimeAxis>
<chartingToolkit:LinearAxis Orientation="Y" Location="Left" Title="Intake per day" ShowGridLines="True" />
</chartingToolkit:Chart.Axes>
<chartingToolkit:AreaSeries x:Name="MySeries2" ItemsSource="{Binding}"
DependentValuePath="Dpd"
IndependentValuePath="Date" Title="{Binding seriesTitle, Mode=TwoWay}" />
<chartingToolkit:ColumnSeries ItemsSource="{Binding}"
DependentValuePath="Dpd"
IndependentValuePath="Date"
IsSelectionEnabled="True"
Title="Missing Values"
SelectionChanged="ColumnSeries_SelectionChanged" />
</chartingToolkit:Chart>
我正在使用ObservableCollections作为图表的ItemSource。
medIntakes = new ObservableCollection<MedIntakeObj>();
medIntakeBars = new ObservableCollection<MedIntakeObj>();
((AreaSeries)Chart.Series[0]).ItemsSource = medIntakes;
((ColumnSeries)Chart.Series[1]).ItemsSource = medIntakeBars;
感谢您的帮助!
答案 0 :(得分:0)
这对我有用; - )
但我仍在寻找更好的解决方案。
void Page_Loaded(object sender, RoutedEventArgs e) {
// seriesItemId, seriesTitle ... have now the
// value form MainPage.xaml
((AreaSeries)Chart.Series[0]).Title = seriesTitle;
}
答案 1 :(得分:0)
安东尼的评论对我有所帮助。 我为UserControl创建了一个ViewModel。
public class ChartViewModel
{
public String seriesTitle { get; set; }
public String axisTitle { get; set; }
public int seriesId { get; set; }
public String serviceUrl { get; set; }
public String comboText { get; set; }
public List<String> comboList { get; set; }
将ViewModel分配给DataContext
public ColumnInputChart(ChartViewModel vm, SimpleCallback cb)
{
InitializeComponent();
this.vm = vm;
this.cbStartScroll = cb;
this.Chart.DataContext = vm;
UserControl的xaml现在有点不同了,绑定工作
< ... />
<chartingToolkit:LinearAxis Orientation="Y" Location="Left" Title="{Binding axisTitle}"
ShowGridLines="True" Interval="1" />
</chartingToolkit:Chart.Axes>
<chartingToolkit:AreaSeries ItemsSource="{Binding values}"
DependentValuePath="Dpd"
IndependentValuePath="Date"
Title="{Binding seriesTitle}" />
<chartingToolkit:ColumnSeries ItemsSource="{Binding bars}"
DependentValuePath="Dpd"
IndependentValuePath="Date"
IsSelectionEnabled="True"
Title="Missing Values"
SelectionChanged="ColumnSeries_SelectionChanged" />
</chartingToolkit:Chart>
现在我想知道将ObservableCollections集成到ViewModel中是否是一个好的设计决策。无论如何我可以为它们分配ItemSource,它们与UserControl非常相关,所以我想将它们保存在UserControl中是一个不错的选择。 请随时评论。