Wpf 具有自定义视图元素的MvvM。数据绑定问题

Wpf 具有自定义视图元素的MvvM。数据绑定问题,wpf,data-binding,mvvm,Wpf,Data Binding,Mvvm,作为数据绑定的新手,我不知道自己做错了什么 我在XAML中定义了一些GUI元素,并将它们与适当的视图模型绑定在一起。到目前为止还不错 我还将一些自定义元素(几何形状)放置在画布中(通过用户控件将画布放置在主窗口中)。我从FrameworkElement派生了这些实体,以支持数据绑定 因此,我所做的是注册一些DependencyProperties并将绑定设置到现有的一个ViewModel,这在我看来是合乎逻辑的 现在,这些自定义类的DependencyProperties显示了一些奇怪的行为

作为数据绑定的新手,我不知道自己做错了什么

  • 我在XAML中定义了一些GUI元素,并将它们与适当的视图模型绑定在一起。到目前为止还不错

  • 我还将一些自定义元素(几何形状)放置在画布中(通过用户控件将画布放置在主窗口中)。我从FrameworkElement派生了这些实体,以支持数据绑定

因此,我所做的是注册一些DependencyProperties并将绑定设置到现有的一个ViewModel,这在我看来是合乎逻辑的

现在,这些自定义类的DependencyProperties显示了一些奇怪的行为

i) 当我将焦点仅放在与自定义图元使用相同ViewModel的视图(控件)上时,属性会正常更新。如果我在其他地方单击,绑定就会断开

ii)有时,虽然属性正在更改,但没有调用回调

iii)当App.xaml中的StartupURI是主窗口时,如果我将ProfileV声明为字段(无论它在哪里实例化),数据绑定机制的工作方式是(I)。如果它是在构造函数中声明的,则该机制不起作用

我做错了什么,我误解了数据绑定的什么关键问题

class ProfileV:FrameworkElement,IGraphicalElement
{
公共整数选择选项卡
{
获取{return(int)GetValue(SelectedTabProperty);}
set{SetValue(SelectedTabProperty,value);}
}
公共静态只读从属属性SelectedTabProperty=
从属属性寄存器(“SelectedTab”、typeof(int)、typeof(ProfileV),
新PropertyMetadata(新PropertyChangedCallback(回调));
公共档案(GeneralExecutionVM、CanvasV CanvasV)
{
DataContext=VM;
BindingOperations.SetBinding(这是SelectedTabProperty,新绑定(“SelectedTab”);
}
公共静态无效回调(DependencyObject d、DependencyPropertyChangedEventArgs e)
{
}
}
这跟这个有关系

公共类GeneralExecutionVM:ObservableObject
{
专用int_选择的选项卡;
公共整数选择选项卡
{
获取{return\u SelectedTab;}
设置
{
if(_SelectedTab==值)返回;
_SelectedTab=值;
base.RaisePropertyChanged(“SelectedTab”);
}
}
}

(可观察对象,是乔什史密斯的MVVM基金会的基类)

回答
好的,我找到了。这里的误解是关于数据上下文

设置它的时间和地点要小心,不要设置显式源对象。我在这里误用了它,造成了一个小的混乱局面。

我们能看到一个典型的绑定,当焦点改变时会断裂吗。。是否有一些在焦点更改时执行的自定义代码?请将解决方案作为正确答案发布,并在允许的情况下尽快接受它(或者删除问题,如果您认为它没有多大帮助)。