Пользовательский элемент управления не отображается при использовании в качестве шаблона данных? - PullRequest
0 голосов
/ 21 октября 2009

У меня есть пользовательский контроль, который я хочу использовать в качестве DataTemplate в списке.

Это работает:

<ListBox>
    <ListBox.ItemTemplate>
        <DataTemplate>
<Grid x:Name="Grid" Height="100" Width="880" Background="LightGray">
    <Grid.RowDefinitions>
        <RowDefinition Height="24"/>
        <RowDefinition Height="24"/>
        <RowDefinition Height="24"/>
        <RowDefinition Height="24"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="190" />
        <ColumnDefinition Width="100" />
        <ColumnDefinition Width="100" />
        <ColumnDefinition Width="100" />
        <ColumnDefinition Width="190" />
        <ColumnDefinition Width="200" />
    </Grid.ColumnDefinitions>
    <Label Grid.Column="0" Grid.Row="0">Client</Label>
    <Label Grid.Column="0" Grid.Row="2">Contact</Label>
    <Label Grid.Column="1" Grid.Row="0">Date Presentation</Label>
    <Label Grid.Column="2" Grid.Row="0">Action</Label>
    <Label Grid.Column="3" Grid.Row="0">Date Interview</Label>
    <Label Grid.Column="3" Grid.Row="2">Time Interview</Label>
    <Label Grid.Column="4" Grid.Row="0">Remarks</Label>
    <Label Grid.Column="5" Margin="0,0,2,0">managed by</Label>
    <ComboBox Grid.Column="0" Grid.Row="1" Margin="2" Text="{Binding Path=Customer}">
        <!--Template-->
    </ComboBox>
    <TextBox Grid.Column="0" Grid.Row="3" Margin="2" Text="{Binding Path=Contact}"></TextBox>
    <TextBox Grid.Column="1" Grid.Row="1" Margin="2" Text="{Binding Path=PresentationDate}"></TextBox>
    <ComboBox Grid.Column="2" Grid.Row="1" Margin="2" Text="{Binding Path=Action}">
        <!--Template-->
    </ComboBox>
    <TextBox Grid.Column="3" Grid.Row="1" Margin="2" Text="{Binding Path=InterviewDate}"></TextBox>
    <TextBox Grid.Column="3" Grid.Row="3" Margin="2" Text="{Binding Path=InterviewTime}"></TextBox>
    <TextBox Grid.Column="4" Grid.Row="1" Grid.RowSpan="3" Margin="2" Text="{Binding Path=Remarks}"></TextBox>
    <StackPanel Orientation="Horizontal" Grid.Column="5" Grid.Row="1" >
        <ComboBox Width="124" Text="{Binding Path=Manager}" Margin="2"></ComboBox>
        <Button Width="60" Height="20" Margin="4,0,0,0" >Mail</Button>
    </StackPanel>
    <CheckBox Grid.Column="5" Grid.Row="3" Margin="2,2,4,2">Rejection communicated</CheckBox>
   </Grid>
       </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Если я поставлю точно такой же код между тегами <DataTemplate>:

<UserControl x:Class="CandiMan.View.CandidatePresentationControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:cm="clr-namespace:CandiMan;assembly=CandiMan"  
    xmlns:vw="clr-namespace:CandiMan.View;assembly=CandiMan"
    xmlns:vm="clr-namespace:CandiMan.ViewModel;assembly=CandiMan"             
    Height="100" Width="880" BorderBrush="Black" BorderThickness="1">

    <Grid x:Name="Grid" Height="100" Width="880" Background="LightGray">
        <Grid.RowDefinitions>
            <RowDefinition Height="24"/>
            <RowDefinition Height="24"/>
            <RowDefinition Height="24"/>
            <RowDefinition Height="24"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="190" />
            <ColumnDefinition Width="100" />
            <ColumnDefinition Width="100" />
            <ColumnDefinition Width="100" />
            <ColumnDefinition Width="190" />
            <ColumnDefinition Width="200" />
        </Grid.ColumnDefinitions>
        <Label Grid.Column="0" Grid.Row="0">Client</Label>
        <Label Grid.Column="0" Grid.Row="2">Contact</Label>
        <Label Grid.Column="1" Grid.Row="0">Date Presentation</Label>
        <Label Grid.Column="2" Grid.Row="0">Action</Label>
        <Label Grid.Column="3" Grid.Row="0">Date Interview</Label>
        <Label Grid.Column="3" Grid.Row="2">Time Interview</Label>
        <Label Grid.Column="4" Grid.Row="0">Remarks</Label>
        <Label Grid.Column="5" Margin="0,0,2,0">managed by</Label>
        <ComboBox Grid.Column="0" Grid.Row="1" Margin="2" Text="{Binding Path=Customer}">
            <!--Template-->
        </ComboBox>
        <TextBox Grid.Column="0" Grid.Row="3" Margin="2" Text="{Binding Path=Contact}"></TextBox>
        <TextBox Grid.Column="1" Grid.Row="1" Margin="2" Text="{Binding Path=PresentationDate}"></TextBox>
        <ComboBox Grid.Column="2" Grid.Row="1" Margin="2" Text="{Binding Path=Action}">
            <!--Template-->
        </ComboBox>
        <TextBox Grid.Column="3" Grid.Row="1" Margin="2" Text="{Binding Path=InterviewDate}"></TextBox>
        <TextBox Grid.Column="3" Grid.Row="3" Margin="2" Text="{Binding Path=InterviewTime}"></TextBox>
        <TextBox Grid.Column="4" Grid.Row="1" Grid.RowSpan="3" Margin="2" Text="{Binding Path=Remarks}"></TextBox>
        <StackPanel Orientation="Horizontal" Grid.Column="5" Grid.Row="1" >
            <ComboBox Width="124" Text="{Binding Path=Manager}" Margin="2"></ComboBox>
            <Button Width="60" Height="20" Margin="4,0,0,0" >Mail</Button>
        </StackPanel>
        <CheckBox Grid.Column="5" Grid.Row="3" Margin="2,2,4,2">Rejection communicated</CheckBox>
       </Grid>

</UserControl>

в пользовательский контроль с именем CandidatePresentationControl и сделайте это как

<ListBox>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <vw:CandidatePresentationControl/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

не обрабатывается. Нет ошибок, просто пустой список. Может кто-нибудь помочь мне ??

Спасибо!

edit: Я забыл что-то, не знаю, если это имеет значение: все, что я делаю, это тоже пользовательский контроль.

Ответы [ 2 ]

1 голос
/ 22 октября 2009

Неважно, что указанный вами UserControl находится в другом UserControl. Попробуйте эти шаги для лучшей отладки вашего XAML-кода: http://beacosta.com/blog/?p=52

Поскольку ваши данные жестко зашиты в XAML, единственный способ объяснить пустой ListBox - это то, что ваш UserControl не может быть найден родительским UserControl, imo.

0 голосов
/ 22 октября 2009
<ListBox>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <vw:CandidatePresentationControl DataContext="{Binding}"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Вы должны написать так, чтобы связать текстовый текст, я бы посоветовал вам взглянуть на MVVM, который даст вам представление о том, как сделать это еще лучше.

...