带有usercontrol的WPF Listbox作为ItemTemplate DataTemplate绑定问题

时间:2010-10-22 09:04:53

标签: wpf binding listbox datatemplate itemtemplate

我创建了一个简单的MVVM wpf项目。基本的想法是显示有关客户年收入的数据以及他与各银行的贷款。

该模型由2个类,财务和金融贷款组成。 ViewModel由2个类FinancialVM和FinancialLoanVM

组成

以下是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(); }


}

}

UI有一个Financial User Ccontrol,它的datacontext绑定到FinancialVM,而一个FinancialLoan用户控件使用datacontext绑定到FinancialLoanVM。

问题是面子,就是Listbox。我已经模仿它将FinancialLoans用户控件设置为Items,但绑定数据不会被注入到FinancialLoanUC DataContext中。 我想这个技巧都在listboxitem datatemplate的部分。 关于我如何使这项工作的任何想法?

<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>

1 个答案:

答案 0 :(得分:4)

回答我自己的问题,我发现了什么是错的。 FinancialLoanUC在XAML中有这个:

<UserControl.DataContext>
    <ViewModel:FinancialLoanVM/>
</UserControl.DataContext>

覆盖了从FinancialUC注入的DataContext。 (我想发生的事情是DataContext是从observable集合的FinancialLoanVM成员设置的,然后它被新的类实例替换,如XAML中所述)

(问问者)