【问题标题】:WPF Listbox with usercontrol as ItemTemplate DataTemplate Binding Issue带有用户控件的 WPF 列表框作为 ItemTemplate DataTemplate 绑定问题
【发布时间】:2010-10-22 09:04:52
【问题描述】:

我创建了一个简单的 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,其数据上下文绑定到 FinancialVM,还有一个 FinancialLoan User 控件,其数据上下文绑定到 FinancialLoanVM。

问题出在列表框上。我已将其模板化为将 FinancialLoans 用户控件作为项目,但绑定的数据不会被注入 FinancialLoanUC DataContext。 我想诀窍在于 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>

【问题讨论】:

    标签: wpf binding listbox datatemplate itemtemplate


    【解决方案1】:

    回答我自己的问题后,我发现了问题所在。 FinancialLoanUC 在 XAML 中有这个:

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

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

    (由提问者)

    【讨论】:

      猜你喜欢
      • 2012-12-16
      • 2012-03-03
      • 2021-08-10
      • 2010-12-09
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      相关资源
      最近更新 更多