DataContext
di Control
è ViewModel
. Quindi esistono molti modi per impostare ViewModel
per DataContext
di View
e, se si trova il numero ViewModel
, ma non c'è la proprietà Items
in ViewModel
, significa che è necessario aggiungere tale proprietà per ottenere il binding del lavoro.
Inoltre, ti consiglio di vedere la finestra Debug->Windows->Output
in cui è possibile visualizzare informazioni vincolanti. Cioè puoi conoscere gli errori vincolanti.
Per concludere, vorrei mostrare modi di impostazione ViewModel
-DataContext
:
ci sono molti approcci per impostare DataContext:
Il primo approccio. In considerazione:
<Window.DataContext>
<local:MainWindowViewModel/>
</Window.DataContext>
Il secondo approccio. Si dovrebbe ignorare OnStartUp()
metodo 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();
}
}
Il terzo approccio. In costruttore di Windows:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext=new MainWindowViewModel();
}
}
Il quarto approccio. È possibile impostare DataContext
tramite DependencyInjection
per UnityContainer
o un altro contenitore IoC. Ma DependencyInjection
, Prism
e UnityContainer
sono altre domande e vanno da questo ambito della domanda.Basta per esempio:
protected override void RegisterTypes()
{
unityContainer.RegisterType<object, ItemControl>("ModuleAUpper");
unityContainer.RegisterType<IViewModelItemControl, ViewModelItemControl>();
unityContainer.RegisterTypeForNavigation<ItemControl>();
}
Non penso che ci sia una risposta definitiva per questo, in quanto non è noto in fase di progettazione. Alcune opzioni in fase di esecuzione sono: a) imposta un binding non valido e verifica il tuo output - potrebbe darti un messaggio che dice proprietà non trovata sull'oggetto b) aggiungere qualcosa come ' ', ma questo mostrerà solo il nome della classe se non ci sono associati DataTemplate o c) solo il modo più lungo di cercare il nome della classe View per vedere come viene inizializzato –
Tone