【发布时间】:2020-11-25 01:03:09
【问题描述】:
我想在 XAML 中实例化一个用 C# 定义的类,并在 XAML 和代码中使用它。我发现我可以将对象实例化为资源并使用 TryFindResource("...") 在代码中定位它,但我对稍后在 XAML 中应该如何引用它感到困惑。例如,我有以下 XAML 代码:
<UserControl.Resources>
<localx:PipeViewModel x:Key="pipeview" />
</UserControl.Resources>
<DockPanel Grid.Row="0" Grid.RowSpan="3" Grid.ColumnSpan="3" Grid.Column="0" Background="White">
<hx:HelixViewport3D x:Name="HelixViewport3D"
ZoomExtentsWhenLoaded="True"
CameraRotationMode="Trackball"
CameraMode="FixedPosition"
PanGesture="LeftClick">
<hx:DefaultLights />
<hx:DefaultLights />
<localx:PipeViewModel x:Name="pipeview" MyPipeModel="{Binding Path=PipeModel, RelativeSource={RelativeSource AncestorType=UserControl, AncestorLevel=1}}"/>
</hx:HelixViewport3D>
</DockPanel>
我不确定资源部分中实例化的对象是否与插入 HelixVievPort3D 中的对象相同。我怀疑使用相同的名称并不一定意味着它们是相同的。如何在 HelixViewPort 中正确插入 pipeview 对象?
【问题讨论】:
-
视图模型对象通常不会被添加到元素树中。您可以将其分配给视图元素的 DataContext 属性,以将其用作 Bindings 的来源。
-
克莱门斯:感谢您的反馈。很抱歉,我并没有那么严格地遵循 MVVM。正如您可能从标签中所怀疑的那样,我的 ViewModel 对象结合了 View 和 ViewModel。它确实包含我想要将其插入视口的视觉元素。所以我的问题仍然悬而未决。
-
听起来很糟糕。但是,请搜索 StackOverflow 以了解如何使用 StaticResourceExtension 来使用 UIElement 资源。