【发布时间】:2018-07-25 10:29:08
【问题描述】:
我对 WPF 开发非常陌生。我正在更新一个现有的应用程序,并且似乎实现了一个 MVVM 框架。 现在我有一个具有依赖属性的用户控件(ChartView.xaml):
public partial class ChartView : UserControl, IDisposable
{
public static readonly DependencyProperty SceneProperty = DependencyProperty.Register(
"Scene",
typeof(IScene),
typeof(ChartView),
new FrameworkPropertyMetadata(
default(IScene),
FrameworkPropertyMetadataOptions.AffectsRender,
ChartChangedCallback));
public IScene Scene
{
get => (IScene)GetValue(SceneProperty);
set => SetValue(SceneProperty, value);
}
}
我想将此属性绑定到 viewModel,并且我在 ChartView.xaml 的 Xaml 中使用以下代码来执行此操作:
<local:ChartView
x:Name="ChartView"
Scene="{Binding Path=(viewModels:ChartViewModel.Scene)}"
>
但问题是,当我在“InitializeComponent()”方法中遇到 stackOverflow 异常时,此代码会反复调用用户控件上的构造函数。即使我从 xaml 中删除了场景绑定,也存在异常。我一加
<local:ChartView>
我开始收到堆栈溢出错误。
谁能指出正确的做法。
谢谢
【问题讨论】:
-
Path=(viewModels:ChartViewModel.Scene)表示静态源属性。它应该只是Path=Scene,前提是当前 DataContext 包含 ChartViewModel 的实例。对于 StackOverflowException,请参见此处:stackoverflow.com/a/48707786/1136211 -
@Clemens,我在这里尝试从同一个用户控件的 xaml 为我的用户控件设置属性绑定
-
这不是您在问题中显示的内容。
<local:ChartView ...>不是 ChartView 的 XAML。 -
对不起,如果它误导了你,但它是 ChartView 的 xaml,我正在尝试在 ChartView.xaml 的 xaml 中添加绑定,并且我的属性存在于 ChartView.xaml.cs