Je suis en train de tester WPF MVVM. J'ai écrit code suivant dans XAMLUn problème de liaison MVMP simple Wpf
<UserControl x:Class="Accounting.Menu"
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"
xmlns:local="clr-namespace:Accounting"
mc:Ignorable="d"
d:DesignHeight="105" d:DesignWidth="300">
<UserControl.DataContext>
<local:MenuViewModel/>
</UserControl.DataContext>
<StackPanel>
<StackPanel>
<TextBlock Text="{Binding Path=MenuHeader}"/>
</StackPanel>
<ListBox ItemsSource="{Binding Path=MenuItems}" Height="70"/>
</StackPanel>
</UserControl>
J'ai un MenuViewModel
avec des propriétés MenuHeader
et MenuItems
. Je reçois des valeurs dans les deux propriétés pendant l'exécution. L'ancien est lié au texte de TextBlock
et le dernier à ItemSource de ListBox
. Mais lorsque je lance la solution, TextBlock et ListBox sont vides.
Edit: Code de ViewModel
public class MenuViewModel: ViewModelBase
{
AccountingDataClassesDataContext db;
private string _menuType;
public string MenuHeader { get; set; }
public ObservableCollection<string> MenuItems { get; set; }
public MenuViewModel()
{
}
public MenuViewModel(string menuType)
{
this._menuType = menuType;
db = new AccountingDataClassesDataContext();
if (menuType == "Vouchers")
{
var items = db.Vouchers.OrderBy(t => t.VoucherName).Select(v => v.VoucherName).ToList<string>();
if (items.Any())
{
MenuItems = new ObservableCollection<string>(items);
MenuHeader = "Vouchers";
}
}
else
{
System.Windows.MessageBox.Show("Menu not found");
}
}
}
Merci à l'avance.
Avez-vous implémenté 'INotifyPropertyChanged' sur votre modèle de vue? – ChrisF
Postez le code de votre ViewModel –
Avez-vous défini le contexte de données de votre vue comme étant le modèle requis? –