привязка пользовательского элемента управления внутри элемента управления ListBox dataTemplate silverlight - PullRequest
1 голос
/ 08 декабря 2010

У меня есть пользовательский элемент управления следующим образом:

<UserControl x:Class="CaseDatabase.Controls.SearchResultControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="192" d:DesignWidth="433">

<Grid x:Name="LayoutRoot" Background="White" Height="230" Width="419">
    <Grid.RowDefinitions>
        <RowDefinition Height="68*" />
        <RowDefinition Height="90*" />
    </Grid.RowDefinitions>
    <TextBlock x:Name="TitleLink" Height="33" Text="{Binding CaseTitle}" HorizontalAlignment="Left" Margin="12,12,0,0" VerticalAlignment="Top" Width="100" Foreground="Red"/>
</Grid>

со свойством зависимости для CaseTitle:

public string CaseTitle
    {
        get { return (string)GetValue(TitleProperty); }
        set { 
            SetValue(TitleProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Title.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty TitleProperty =
        DependencyProperty.Register("CaseTitle", typeof(string), typeof(SearchResultControl), new PropertyMetadata(new PropertyChangedCallback(SearchResultControl.OnValueChanged)));

на моей странице .xaml У меня естьlistbox и внутри его таблицы данных я создаю свой контроль.ItemsSource этого списка привязывается к доменной службе.Я знаю, что привязка работает, и я получаю подходящее число элементов, но данные не отображаются вообще.

код для моего списка следующий:

 <ListBox x:Name="SearchResultsList" Width="Auto" MinHeight="640" ItemsSource="{Binding ElementName=SearchDomainDataSource, Path=Data}"
                  Grid.Row="0" Grid.Column="0">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid x:Name="LayoutRoot" Background="White" Height="158" Width="400">
                    <my:SearchResultControl CaseTitle="{Binding Path=Title}" /> 
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

Так что кто-нибудь может подсказать, какЯ испортил привязку к своему пользовательскому элементу управления?Thankx

1 Ответ

1 голос
/ 08 декабря 2010

Проблема в том, что {Binding CaseTitle} не находит созданное вами свойство зависимости CaseTitle.Объект Source по умолчанию, который использует Binding, является текущим значением свойства DataContext элемента, с которым он связан.Этот объект не является UserControl.

. Поэтому вам необходимо изменить эту привязку следующим образом: -

<TextBlock x:Name="TitleLink" Height="33" Text="{Binding Parent.CaseTitle, ElementName=LayoutRoot}" HorizontalAlignment="Left" Margin="12,12,0,0" VerticalAlignment="Top" Width="100" Foreground="Red"/> 

Теперь исходный объект привязки становится Grid с именем«LayoutRoot», который является прямым потомком UserControl, следовательно, его свойство Parent является пользовательским элементом управления, и оттуда вы можете привязаться к свойству CaseTitle.

...