J'ai créé un simple projet MVVM wpf. L'idée de base est d'afficher des données sur le revenu annuel d'un client et les prêts qu'il a avec différentes banques.WPF Listbox avec usercontrol en tant que ItemTemplate DataTemplate Binding Problème
Le modèle se compose de 2 classes, Financial et FinancialLoans. Le ViewModel se compose de 2 classes FinancialVM et FinancialLoanVM
Voici les classes VM:
namespace WpfTester.ViewModel{
public class FinancialVM
{
public Model.Financial Financial { get; set; }
public ObservableCollection<ViewModel.FinancialLoanVM> FinancialLoanVMs { get; set; }
public FinancialVM()
{
//Fill the models with some sample data
Financial = new WpfTester.Model.Financial { Income = 1950.12 };
Financial.FinancialLoans = new ObservableCollection<Model.FinancialLoan>();
Financial.FinancialLoans.Add(new WpfTester.Model.FinancialLoan { Bank = new Random().Next().ToString() });
Financial.FinancialLoans.Add(new WpfTester.Model.FinancialLoan { Bank = new Random().Next().ToString() });
FinancialLoanVMs = new ObservableCollection<FinancialLoanVM>();
foreach (Model.FinancialLoan financialLoan in Financial.FinancialLoans)
{
FinancialLoanVMs.Add(new ViewModel.FinancialLoanVM { FinancialLoan = financialLoan });
}
} }
public class FinancialLoanVM
{
public Model.FinancialLoan FinancialLoan { get; set; }
public FinancialLoanVM()
{ FinancialLoan = new Model.FinancialLoan(); }
}
}
L'interface utilisateur a un à Pilotage utilisateur financier avec ses datacontext liés à l'FinancialVM et un utilisateur FinancialLoan contrôle avec le datacontext lié au FinancialLoanVM.
Le problème est le visage, est avec la Listbox. Je l'ai modélisé pour que les contrôles utilisateur de FinancialLoans soient des éléments, mais les données liées ne sont pas injectées dans le DataContext de FinancialLoanUC. Je suppose que l'astuce est dans la partie du datatemplate listboxitem. Des idées de comment je peux faire ce travail?
<UserControl.DataContext>
<ViewModel:FinancialVM/>
</UserControl.DataContext>
<Grid d:DataContext="{d:DesignInstance Type=ViewModel:FinancialVM}" >
<Grid.RowDefinitions>
<RowDefinition Height="23"/>
<RowDefinition/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<TextBlock Text="Income= "/>
<Label Content="{Binding Path=Financial.Income}"/>
</StackPanel>
<ListBox Grid.Row="1" ItemsSource="{Binding Path=FinancialLoanVMs}">
<ListBox.ItemTemplate>
<DataTemplate>
<View:FinancialLoanUC DataContext="{Binding }" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>