DataContext
Control
является ViewModel
. Так что существует множество способов установить ViewModel
для DataContext
из View
, и если вы нашли ViewModel
, но нет Items
собственности в ViewModel
, значит это необходимо добавить к объявлению об объекте, чтобы получить привязку к работе.
Кроме того, я рекомендую вам посмотреть окно Debug->Windows->Output
, где вы можете просмотреть информацию привязки. То есть вы можете знать ошибки привязки.
В заключение я хотел бы показать способы задания ViewModel
к DataContext
:
Есть много подходов, чтобы установить DataContext:
Первый подход. Ввиду:
<Window.DataContext>
<local:MainWindowViewModel/>
</Window.DataContext>
Второй подход. Вы должны переопределить OnStartUp()
метод App.xaml.cs
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
MainWindow app = new MainWindow();
ProductViewModel context = new ProductViewModel();
app.DataContext = context;
app.Show();
}
}
Третий подход. В конструкторе Windows:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext=new MainWindowViewModel();
}
}
Четвертый подход. Вы можете установить DataContext
через DependencyInjection
на UnityContainer
или другой контейнер IoC. Но DependencyInjection
, Prism
и UnityContainer
есть другие вопросы и выходит из этой сферы вопроса.Так, например:
protected override void RegisterTypes()
{
unityContainer.RegisterType<object, ItemControl>("ModuleAUpper");
unityContainer.RegisterType<IViewModelItemControl, ViewModelItemControl>();
unityContainer.RegisterTypeForNavigation<ItemControl>();
}
Я не думаю, что для этого есть окончательный ответ, так как он не известен во время разработки. Несколько вариантов во время выполнения: a) установить недействительную привязку и проверить ваш результат - это может дать вам свойство с ошибкой, не найденное на объекте b) добавить что-то вроде ' ', но это будет показывать только имя класса, если нет связанного с DataTemplate или c) просто более длинный способ поиска имени класса View, чтобы увидеть, как он инициализируется. –
Tone