获取“A 'Binding' 只能在 DependencyObject 的 DependencyProperty 上设置。” DependencyObject 上的错误
Getting a 'A 'Binding' can only be set on a DependencyProperty of a DependencyObject.' error on a DependencyObject
我的 XAML 文件中不断出现 "A 'Binding' can only be set on a DependencyProperty of a DependencyObject." 错误,并且 运行 应用程序也无法正常工作。
我正要去 post 代码,因为我已经盯着它看了好几个小时,没有解决方案...
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];
}
}
如您所见,我的视图模型用作 MainWindow
class 上的 DataContext
实际上是一个依赖项 属性。然而,我无法让它正常工作,而且我不断收到错误消息,告诉我这不是依赖对象。
此外,这里是关联用户控件上 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);
}
}
}
我错过了什么?
我不确定这是怎么回事。我尝试了所有这些步骤,但我最后试了一次,一起完成所有这些步骤,这解决了问题。如果其他人在遵循所有其他建议后对这个问题束手无策,请试试这个。
- 关闭您的 XAML 个文件。
- 清洁您的解决方案。
- 关闭Visual Studio。
- 重新启动您的电脑。是的,这似乎有点矫枉过正,但它是有效的一部分,所以我把它包括在内。
- 重新打开您的解决方案并重建。
- 重新打开您的 XAML 文件,问题应该得到解决。
我的 XAML 文件中不断出现 "A 'Binding' can only be set on a DependencyProperty of a DependencyObject." 错误,并且 运行 应用程序也无法正常工作。
我正要去 post 代码,因为我已经盯着它看了好几个小时,没有解决方案...
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];
}
}
如您所见,我的视图模型用作 MainWindow
class 上的 DataContext
实际上是一个依赖项 属性。然而,我无法让它正常工作,而且我不断收到错误消息,告诉我这不是依赖对象。
此外,这里是关联用户控件上 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);
}
}
}
我错过了什么?
我不确定这是怎么回事。我尝试了所有这些步骤,但我最后试了一次,一起完成所有这些步骤,这解决了问题。如果其他人在遵循所有其他建议后对这个问题束手无策,请试试这个。
- 关闭您的 XAML 个文件。
- 清洁您的解决方案。
- 关闭Visual Studio。
- 重新启动您的电脑。是的,这似乎有点矫枉过正,但它是有效的一部分,所以我把它包括在内。
- 重新打开您的解决方案并重建。
- 重新打开您的 XAML 文件,问题应该得到解决。