WPF中使用用户控件作为ItemTemplate DataTemplate绑定Listbox的问题

4

我创建了一个简单的MVVM wpf项目。基本思路是显示有关客户年收入和他在各个银行贷款的数据。

模型由2个类Financial和FinancialLoans组成。 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 Control”,它的数据上下文绑定到“FinancialVM”,还有一个“FinancialLoan User control”,其数据上下文绑定到“FinancialLoanVM”。

问题在于Listbox列表框,我已经将其模板化,以便将“FinancialLoans User Controls”作为项,但绑定的数据无法注入到“FinancialLoanUC”的数据上下文中。 我想关键在于ListBoxItem数据模板的部分。 您有什么好的想法可以让这个工作起来吗?

<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个回答

4
回答我自己的问题,我找到了问题所在。 FinancialLoanUC在XAML中有这样的代码:
<UserControl.DataContext>
    <ViewModel:FinancialLoanVM/>
</UserControl.DataContext>

这段代码覆盖了从FinancialUC注入的DataContext。(我猜测发生的情况是,DataContext是从可观察集合的FinancialLoanVM成员设置的,然后被XAML中描述的新类实例替换了)

(由提问者提供)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接