我有一个DataTemplate,它需要一个对象的事件处理程序。此DataTemplate包含在ResourceDictionary中。向此模板添加事件处理程序的最佳方法是什么?
我尝试在app.xaml.cs中定义事件处理程序,但处理程序没有执行。为ResourceDictionary创建代码隐藏文件会导致在MergedDictionaries中启动应用程序时加载错误。
来自GraphStyles.xaml的
<DataTemplate x:Key="PieTemplate">
<Grid HorizontalAlignment="Left" Width="350" Height="350" >
<Border>
<Charting:Chart
x:Name="PieChart"
Title="Play Attempts"
Margin="70,0" Loaded="PieChart_Loaded">
<Charting:Chart.Series>
<Charting:PieSeries
Title="Attempts"
ItemsSource="{Binding Items}"
IndependentValueBinding="{Binding Name}"
DependentValueBinding="{Binding Value}"
IsSelectionEnabled="True" />
</Charting:Chart.Series>
</Charting:Chart>
</Border>
</Grid>
</DataTemplate>
在App.Xaml.cs
中 private void PieChart_Loaded(object sender, RoutedEventArgs e)
{
var pieChart = sender as Chart;
var legendItems = ((PieSeries)pieChart.Series[0]).LegendItems;
foreach (LegendItem item in legendItems)
{
pieChart.LegendItems.Add(item);
pieChart.LegendStyle = item.Style;
}
}
答案 0 :(得分:0)
选项1
据我所知,您必须在页面/ usercontrol的顶部参考资源中引用datatemplate。使用合并字典,您仍然可以使用graphstyles.xaml。
如果你感到不舒服,因为这违反了你的惯例,那么有一个相当漫长的选择:
选项2
我必须说我对选项2并不感到生气,因为它打破了一些视图/虚拟机分离,但它应该完成工作 - 请注意,您必须通过附加行为将图表作为对象传递,到视图模型然后在将其转换回图表之前返回到视图。