2017-05-29 184 views
0

我一直得到一個「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

回答

0

我不確定這是關於什麼的。我嘗試了所有這些步驟,但我最後一次嘗試,並將所有這些步驟一起完成,並解決了這個問題。如果任何其他人在遵循所有其他建議之後對此問題有所瞭解,請嘗試此操作。

  1. 關閉您的XAML文件。
  2. 清理您的解決方案。
  3. 關閉Visual Studio。
  4. 重新啓動您的電腦。是的,這看起來有點過分,但它是工作的一部分,所以我包括它。
  5. 重新打開您的解決方案並重建。
  6. 重新打開您的XAML文件,問題應該修復。
相關問題