Jea*_*Col 3 c# wpf dynamic-data-display
我遵循了本教程,但我无法将我学到的知识应用到我的项目中.
我有一个LineGraph对象(动态数据显示),我想创建一个在LineGraph的厚度等于0时引发的事件.
我应该如何按照本教程编写它?
Ibr*_*jar 13
以下是我如何使用RoutedEvent:
创建一个派生自的类LineGraph,让我们说CustomLineGraph:
public class CustomLineGraph : LineGraph {
}
Run Code Online (Sandbox Code Playgroud)像这样创建我们的路由事件:
public class CustomLineGraph : LineGraph {
public static readonly RoutedEvent ThicknessEvent = EventManager.RegisterRoutedEvent("Thickness", RoutingStrategy.Bubble, typeof(RoutedEventHandler, typeof(CustomLineGraph));
// .NET event wrapper
public event RoutedEventHandler Thickness
{
add { AddHandler(CustomLineGraph.ThicknessEvent, value); }
remove { RemoveHandler(CustomLineGraph.ThicknessEvent, value); }
}
}
Run Code Online (Sandbox Code Playgroud)现在我们覆盖StrokeThickness属性,以便在该属性的值为时,我们可以引发自定义路由事件0.
public class CustomLineGraph : LineGraph {
public static readonly RoutedEvent ThicknessEvent = EventManager.RegisterRoutedEvent("Thickness", RoutingStrategy.Bubble, typeof(RoutedEventHandler, typeof(CustomLineGraph));
// .NET event wrapper
public event RoutedEventHandler Thickness
{
add { AddHandler(CustomLineGraph.ThicknessEvent, value); }
remove { RemoveHandler(CustomLineGraph.ThicknessEvent, value); }
}
public override double StrokeThickness {
get { return base.StrokeThickness; }
set
{
base.StrokeThickness = value;
if (value == 0)
RaiseEvent(new RoutedEventArgs(CustomLineGraph.ThicknessEvent, this));
}
}
}
Run Code Online (Sandbox Code Playgroud)我们完了 !
就个人而言,我通常会避免创建事件,而是选择创建事件delegate.如果您特别需要某个活动,请忽略此答案.我更喜欢使用delegates 的原因是你不需要创建额外的EventArgs类,我也可以设置自己的参数类型.
首先,让我们创建一个委托:
public delegate void TypeOfDelegate(YourDataType dataInstance);
Run Code Online (Sandbox Code Playgroud)
现在是一个吸气者和二传手:
public TypeOfDelegate DelegateProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)
现在让我们创建一个匹配以下参数的输入和输出参数的方法delegate:
public void CanBeCalledAnything(YourDataType dataInstance)
{
// do something with the dataInstance parameter
}
Run Code Online (Sandbox Code Playgroud)
现在我们可以将此方法设置为一个(多个)处理程序delegate:
DelegateProperty += CanBeCalledAnything;
Run Code Online (Sandbox Code Playgroud)
最后,让我们打电话给我们delegate......这相当于提升事件:
if (DelegateProperty != null) DelegateProperty(dataInstanceOfTypeYourDataType);
Run Code Online (Sandbox Code Playgroud)
请注意重要的检查null.就是这样了!如果您想要更多或更少的参数,只需在delegate声明和处理方法中添加或删除它们......简单.