获取'A'绑定'只能在DependencyObject的DependencyProperty上设置'。 DependencyObject上的错误

问题描述:

我一直得到一个“A'Binding'只能在DependencyObject的DependencyProperty上设置。”我的XAML文件中出现错误并且运行该应用程序也不起作用。获取'A'绑定'只能在DependencyObject的DependencyProperty上设置'。 DependencyObject上的错误

我只是去后,因为我一直在盯着这几个小时,没有分辨率的代码...

MainWindow.xaml

<local:ToolBarButton ViewModel="{Binding SelectedScreen.BackButtonViewModel}"/> 

上面一行是什么给我在我的MainWindow.xaml上的错误。

SelectedScreen属性在我的MainWindowViewModel中定义。下面的代码。

MainWindowViewModel.cs

public class MainWindowViewModel : DependencyObject, INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged = delegate { }; 

    private ObservableCollection<ScreenViewModelBase> _screens; 
    public ObservableCollection<ScreenViewModelBase> Screens 
    { 
     get { return _screens; } 
     set 
     { 
      if (value != _screens) 
      { 
       _screens = value; 
       PropertyChanged(this, new PropertyChangedEventArgs(nameof(Screens))); 
      } 
     } 
    } 

    public static readonly DependencyProperty SelectedScreenProperty = 
     DependencyProperty.Register(nameof(SelectedScreen), typeof(ScreenViewModelBase), typeof(MainWindowViewModel)); 


    public ScreenViewModelBase SelectedScreen 
    { 
     get { return (ScreenViewModelBase)GetValue(SelectedScreenProperty); } 
     set { SetValue(SelectedScreenProperty, value); } 
    } 



    public MainWindowViewModel() 
    { 
     Screens.Add(new HomeScreenViewModel()); 
     SelectedScreen = Screens[0]; 

    } 
} 

正如你所看到的,用我的视图模型作为我DataContextMainWindow类,事实上,一个依赖属性。然而,我无法得到这个工作正常,我不断收到错误,告诉我这不是一个依赖对象。

此外,这是相关用户控件上的ViewModel属性的代码。

ToolBarButton.xaml.cs(用户控件)

public partial class ToolBarButton : UserControl//, INotifyPropertyChanged 
{ 

    public static DependencyProperty viewModelProperty = DependencyProperty.Register(nameof(ViewModel), typeof(ToolBarButtonViewModel), typeof(ToolBarButton)); 

    public ToolBarButtonViewModel ViewModel 
    { 
     get 
     { 
      return (ToolBarButtonViewModel)GetValue(viewModelProperty); 
     } 
     set 
     { 
      SetValue(viewModelProperty, value); 
     } 
    } 
} 

我缺少什么?

+0

谢谢@ash。问题是'ViewModel'实际上是一个UserControl的依赖属性,它继承自DependencyObject。 – RLH

+0

我正要回答,然后我注意到一切看起来都很好。尝试再次创建文件 - 我们可能会错过某些非常明显/简单的事情。 也看看调试窗口,并实现绑定上的DebugConverter,以帮助您调试 –

+0

我不确定这是罪魁祸首,但根据[MSDN](https://msdn.microsoft.com/en-us/ library/ms750428(v = vs.110).aspx)“用于存储依赖项属性的名称和特性的标识符字段的名称必须是您为依赖项属性选择的_Name_,作为_Register_调用的一部分,由文字字符串_Property_“附加。在你的情况下,持有依赖属性的字段应该命名为'ViewModelProperty',而不是'viewModelProperty'(大写_V_,而不是小写_v_)。这是我在代码中看到的唯一错误。 – Grx70

我不确定这是关于什么的。我尝试了所有这些步骤,但我最后一次尝试,并将所有这些步骤一起完成,并解决了这个问题。如果任何其他人在遵循所有其他建议之后对此问题有所了解,请尝试此操作。

  1. 关闭您的XAML文件。
  2. 清理您的解决方案。
  3. 关闭Visual Studio。
  4. 重新启动您的电脑。是的,这看起来有点过分,但它是工作的一部分,所以我包括它。
  5. 重新打开您的解决方案并重建。
  6. 重新打开您的XAML文件,问题应该修复。