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

时间:2017-05-29 17:38:37

标签: c# wpf xaml dependency-properties dependencyobject

我一直在" A' Binding'只能在DependencyObject的DependencyProperty上设置。"我的XAML文件中的错误并且运行应用程序也没有。

我只是要发布代码,因为我已经盯着这几个小时,没有解决方案...

MainWindow.xaml

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

以上一行是我在MainWindow.xaml上发生错误的原因。

我的MainWindowViewModel中定义了SelectedScreen属性。代码如下。

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];

    }
}

正如您所看到的,我在我的DataContext类中用作MainWindow的视图模型实际上是一个依赖属性。然而,我无法使其正常工作,并且我不断收到错误,告诉我这不是一个依赖对象。

此外,以下是关联用户控件上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);
        }
    }
}

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我不确定这是什么意思。我尝试了所有这些步骤,但我最后一次尝试,将所有这些一起完成,这解决了问题。如果其他任何人在遵循所有其他建议后仍然对这个问题有所了解,那就试试吧。

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