J'apprends WPF pour le moment. Je trouve xaml assez difficile à utiliser. J'ai MainWindow.xaml
défini comme ceci:Affichage d'un contrôle basé sur le type de viewmoundel viewmodel?
<Window x:Class="Compliance.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary Source="MainWindow.Resources.xaml"></ResourceDictionary>
</Window.Resources>
<Grid>
</Grid>
</Window>
Et MainWindow.Resources.xaml
comme ceci:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:Compliance.ViewModel"
xmlns:vw="clr-namespace:Compliance.View">
<DataTemplate DataType="{x:Type vm:Entities.AbstractEntityViewModel}">
<vw:AbstractEntityView></vw:AbstractEntityView>
</DataTemplate>
</ResourceDictionary>
AbstractEntityView
est comme ceci:
<UserControl x:Class="Compliance.View.AbstractEntityView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel>
<Label Content="ID:"></Label>
<TextBlock Text="{Binding Path=EntityId}"></TextBlock>
</StackPanel>
</UserControl>
Puis, en App.xaml.cs
je suis impérieuses OnStartup
comme ceci:
MainWindow window = new MainWindow();
//Model class
Individual ind = new Individual(1,"Name");
//subclass of AbstractEntityViewModel
var vm = new Entities.IndividualEntityViewModel(ind);
window.DataContext = vm;
window.Show();
Cependant, rien n'apparaît dans la fenêtre.
J'ai utilisé la réponse de this question pour obtenir mon contrôle à rendre. Cependant, cela vous oblige à vous référer aux éléments de la vue du code, ce que je ne veux pas faire.
Est-il possible d'obtenir une fenêtre pour choisir une vue à afficher en fonction de l'ensemble ViewModel en tant que son datacontext? Ou ai-je la mauvaise idée de la façon dont MVVM est censé fonctionner?
Neat, merci. J'ai eu un problème bizarre avec while avec la ligne 'DataContext =" {Relative RelativeSource = {RelativeSource Self}} "' qui est apparu dans ma définition de fenêtre (je suis sûr que je ne l'ai pas mis là ...) mais tout travaillé une fois que j'ai enlevé cela. – Oliver
@Oliver En vous référant à 'Self 'dans la liaison, vous définissez la source de liaison sur l'objet de l'interface utilisateur, et non sur' DataContext' – Rachel