我一直得到一個「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];
}
}
正如你所看到的,用我的視圖模型作爲我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);
}
}
}
我缺少什麼?
謝謝@ash。問題是'ViewModel'實際上是一個UserControl的依賴屬性,它繼承自DependencyObject。 – RLH
我正要回答,然後我注意到一切看起來都很好。嘗試再次創建文件 - 我們可能會錯過某些非常明顯/簡單的事情。 也看看調試窗口,並實現綁定上的DebugConverter,以幫助您調試 –
我不確定這是罪魁禍首,但根據[MSDN](https://msdn.microsoft.com/en-us/ library/ms750428(v = vs.110).aspx)「用於存儲依賴項屬性的名稱和特性的標識符字段的名稱必須是您爲依賴項屬性選擇的_Name_,作爲_Register_調用的一部分,由文字字符串_Property_「附加。在你的情況下,持有依賴屬性的字段應該命名爲'ViewModelProperty',而不是'viewModelProperty'(大寫_V_,而不是小寫_v_)。這是我在代碼中看到的唯一錯誤。 – Grx70