Связывание данных с управлением аккордеоном Silverlight - PullRequest
2 голосов
/ 22 января 2010

У меня есть элемент управления Silverlight Accordion в ChildWindow, и я настроил его следующим образом

<Style x:Key=itemStyle TargetType=AccordionItem>
  <Setter Porperty=HeaderTemplate>
    <DataTemplate>
      <TextBlock x:Name=_headertext/>
    </DataTemplate>
  </Setter>
</Style>

<Accordion Style"{StaticResource itemStyle}">
  <Accordion.ContentTemplate>
    <DataTemplate>
      <StackPanel>
        <CheckBox/>
        <TextBlock x:name=_contenttext/>
    </DataTemplate>
  <Accordion.ContentTemplate>
</Accordion>

Теперь у меня есть метод в моем Chilwindow.Xaml

public void  LoadItems(ObservableColection<Groups> gp)
{}

Этот метод вызывается с главной страницы и передает значение gp

Группы - это класс с открытыми свойствами и наблюдаемыми коллекциями. Например,

public class Groups
{
  public string FirstName{get, set;}

  public ObservableCollection<Details> details {get, set;}

  public Groups()
  {
    this.details=new ObservableCollection<Details>();
  }

}

My Details Class is as follows

public class Details
{
   public int id {get; set;}
   public string LastName{get; set;} 
   --------
   -------
}

Теперь мне нужно связать _headertext (TextBlock в шаблоне заголовка) с FirstName и _contenttext (TextBlock в шаблоне содержимого) с LastName.

Пожалуйста, помогите мне в этом. Мне нужна ваша помощь.

Спасибо Rani

Ответы [ 2 ]

1 голос
/ 11 августа 2010

Во-первых, TargetType указывает на AccordionItem, и вы пытаетесь использовать стиль на самом элементе Accordion.Это никогда не сработает.Чтобы заставить это работать, вам нужно создать два стиля, один для самого Аккордеона и один для AccordionItem, на который вы ссылаетесь в стиле для аккордеона.

    <Style x:Key="itemStyle" TargetType="layoutToolkit:AccordionItem">
        <Setter Property="HeaderTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBlock Text="{Binding Header}"/>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style x:Key="accordionStyle" TargetType="layoutToolkit:Accordion">
        <Setter Property="ItemContainerStyle" Value="{StaticResource itemStyle}" />
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBlock Text="{Binding Content}"/>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Затем вы определяете свой аккордеонуправление вот так:

    <layoutToolkit:Accordion Height="Auto"
                             Name="accordion1" 
                             ExpandDirection="Right" 
                             SelectionMode="One"
                             ItemsSource="{Binding}"
                             Style="{StaticResource accordionStyle}">
    </layoutToolkit:Accordion>
1 голос
/ 24 февраля 2010

Почему бы не использовать привязку данных в XAML напрямую? Вам не нужно делать это в коде.

<Style x:Key=itemStyle TargetType=AccordionItem> 
  <Setter Porperty=HeaderTemplate> 
    <DataTemplate> 
      <TextBlock Text="{Binding FirstName}"/> 
    </DataTemplate> 
  </Setter> 
</Style> 

<Accordion Style"{StaticResource itemStyle}"> 
  <Accordion.ContentTemplate> 
    <DataTemplate> 
      <StackPanel> 
        <CheckBox/> 
        <TextBlock Text="{Binding LastName}"/> 
    </DataTemplate> 
  <Accordion.ContentTemplate> 
</Accordion> 
...