然后在Mainwindow的某个地方,我指的是:
<graphicus:CakeAndPuddingUnderAngleRenderer Grid.Column="2" Grid.Row="1" x:Name="CakePuddingRenderer"/>
在此控件中调用数据渲染,我在事件处理程序中执行调用(例如,在datagrids中选择的事件中,输入的值更改的价值更改),例如:
// selectedCake represents a selected value in table of... cakes!
CakePuddingRenderer.LoadCakeInViewPort(fullPath,
selectedCake.CakeName,selectedCake.CakeAngle, selectedCake.CakeMirror);
这样:
// sPudding is a selected value in table of... pudding!
// CakePuddingAngleTestVM is a ViewModel class for a MainWindow
CakePuddingRenderer.LoadPuddingInViewPort(sPudding.PuddingGeometryInstance,
(DataContext as CakePuddingAngleTestVM).StartPuddingAngle,
(DataContext as CakePuddingAngleTestVM).StartPuddingCoordinateX,
(DataContext as CakePuddingAngleTestVM).StartPuddingCoordinateY,
(DataContext as CakePuddingAngleTestVM).StartPuddingCoordinateZ);
未来的代码将太纠缠。是否可以为我的自定义控件添加参数并为其分配绑定,例如:
<graphicus:CakeAndPuddingUnderAngleRenderer
StartPuddingAngleValue="{Binding StartPuddingAngle}"
PuddingGeometryValue="{Binding PuddingGeometryInstance}"
StartPuddingCoordinateXValue="{Binding StartPuddingCoordinateX}"
StartPuddingCoordinateYValue="{Binding StartPuddingCoordinateY}"
StartPuddingCoordinateZValue="{Binding StartPuddingCoordinateZ}"
CakeNameValue={Binding ... }
Grid.Column="2" Grid.Row="1" x:Name="CakePuddingRenderer"/>
?
我认为它可能是MVVM的风格
依赖性属性对此任务有帮助。我从评论中得到了暗示。我在这里读过:Https://metanit.com/sharp/wpf/13.php 我是我定义这种依赖性属性的方式:
public static readonly DependencyProperty StartPuddingXProperty = DependencyProperty.Register(
"StartPuddingX",
typeof(double),
typeof(ProfileAndPuddingUnderAngleRenderer),
new FrameworkPropertyMetadata(
0.0,
FrameworkPropertyMetadataOptions.None,
new PropertyChangedCallback(OnStartPuddingXChanged),
new CoerceValueCallback(CoerceStartPuddingX)));
CerercestartPuddingX非常适合验证,但我将其留为空
private static object CoerceStartPuddingX(DependencyObject d, object baseValue)
{
return baseValue;
}
如果您想更改控制内部的一些值,那么
PropertyChangedCallback
和OnStartPuddingXChanged
// method called when the value of a property changes. It is static so you cannot access here parameters and methods of instance
private static void OnStartPuddingXChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is ProfileAndPuddingUnderAngleRenderer control)
{
// Call an instance method to handle the change. You can access there instance properties and methods
control.OnStartPuddingXChangedInstance((double)e.OldValue, (double)e.NewValue);
}
}
that是IT