簡體   English   中英

只能在 DependencyObject 的 DependencyProperty 上設置“A 'Binding”。 DependencyObject 上的錯誤

[英]Getting a 'A 'Binding' can only be set on a DependencyProperty of a DependencyObject.' error on a DependencyObject

我不斷收到“只能在 DependencyObject 的 DependencyProperty 上設置“綁定”。 我的 XAML 文件中出現錯誤並且運行該應用程序也不起作用。

我只是要發布代碼,因為我一直盯着這個幾個小時,沒有解決方案......

主窗口.xaml

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

上面這行是我的 MainWindow.xaml 出現錯誤的原因。

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

    }
}

如您所見,在MainWindow類中用作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);
        }
    }
}

我錯過了什么?

我不確定這是關於什么的。 我嘗試了所有這些步驟,但我最后嘗試了一次,將所有這些步驟一起做,這解決了問題。 如果其他人在遵循所有其他建議后對這個問題不知所措,請嘗試此操作。

  1. 關閉 XAML 文件。
  2. 清潔您的解決方案。
  3. 關閉 Visual Studio。
  4. 重新啟動您的電腦。 是的,這似乎有點矯枉過正,但它是有效的一部分,所以我將其包括在內。
  5. 重新打開您的解決方案並重建。
  6. 重新打開您的 XAML 文件,問題應該得到解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM