如何在我的自定义用户控制的XAML引用中使用自定义属性? 我已经实现了一个自定义用户控件,以使用Helix Toolkit在3D中呈现某些形状,我将此控件包括在MainWindow中(在这些代码示例中,我删除了域细节,因此它们似乎是

问题描述 投票:0回答:1

然后在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

我是我定义这种依赖性属性的方式:
c# wpf xaml mvvm
1个回答
0
投票
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

    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.