WPF Listbox с пользовательским контролем как проблема привязки ItemTemplate DataTemplate - PullRequest
4 голосов
/ 22 октября 2010

Я создал простой MVVM-проект wpf.Основная идея состоит в том, чтобы отобразить данные о годовом доходе клиента и ссудах, которые он имеет в различных банках.

Модель состоит из 2 классов: Financial и FinancialLoans.ViewModel состоит из 2 классов FinancialVM и FinancialLoanVM

Ниже приведены классы виртуальных машин:

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


}

}

В пользовательском интерфейсе есть элемент управления финансовыми пользователями, текст которого связан сFinancialVM и пользовательский элемент управления FinancialLoan с текстом данных, привязанным к 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>

1 Ответ

4 голосов
/ 20 августа 2012

Отвечая на мой собственный вопрос, я обнаружил, что было не так.У FinancialLoanUC это было в XAML:

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

, которое перекрывало DataContext, введенный из FinancialUC.(Я предполагаю, что происходило то, что DataContext был установлен из члена FinancialLoanVM наблюдаемой коллекции, а затем был заменен новым экземпляром класса, как описано в XAML)

(Автор вопроса)

...