DataContext
z Control
jest ViewModel
. Tak więc istnieje wiele sposobów, aby ustawić ViewModel
dla DataContext
z View
, a jeśli okaże się swoją ViewModel
, ale nie ma Items
nieruchomość w ViewModel
, oznacza to, że należy dodać taką właściwość, aby dostać pracę wiążące.
Polecam również, aby zobaczyć okno Debug->Windows->Output
, w którym można zobaczyć informacje o wiązaniu. To znaczy, że możesz znać wiążące błędy.
Kończąc, chciałbym pokazać sposoby ustawiania ViewModel
do DataContext
:
Istnieje wiele sposobów, aby ustawić DataContext:
Pierwsze podejście. W świetle:
<Window.DataContext>
<local:MainWindowViewModel/>
</Window.DataContext>
Drugie podejście. powinny przesłonić OnStartUp()
metodę 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();
}
}
Trzecie podejście. W konstruktor Windows:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext=new MainWindowViewModel();
}
}
Czwarte podejście. Można ustawić DataContext
przez DependencyInjection
przez UnityContainer
lub inny kontener IoC. Ale DependencyInjection
, Prism
i UnityContainer
to inne pytania i wychodzi z tego zakresu pytania.Wystarczy na przykład:
protected override void RegisterTypes()
{
unityContainer.RegisterType<object, ItemControl>("ModuleAUpper");
unityContainer.RegisterType<IViewModelItemControl, ViewModelItemControl>();
unityContainer.RegisterTypeForNavigation<ItemControl>();
}
Nie sądzę, że istnieje na to ostateczna odpowiedź, ponieważ nie jest znana w czasie projektowania. Kilka opcji w czasie wykonywania to: a) ustawienie nieprawidłowego powiązania i sprawdzenie danych wyjściowych - może to spowodować błąd mówiący, że właściwość nie została znaleziona na obiekcie b) dodać coś takiego jak " ", ale to będzie wyświetlało nazwę klasy tylko wtedy, gdy nie ma skojarzonej DataTemplate lub c) tylko dłuższy sposób wyszukiwania nazwy klasy View, aby zobaczyć, jak jest inicjowany –
Tone