2014-02-13 7 views
1

У меня есть ItemsControl, который имеет свой ItemsSource набор с Binding к ObservableCollection на моем ViewModel. Я использую элемент управления Button в своем ItemTemplate, чтобы отображать мои данные, и я использую DataTemplate в пределах Button, и ни одна из данных Binding не отображается. Ниже приведен XAML в вопрос:XAML вложенные DataTemplate привязки данных

<ItemsControl ItemsSource="{Binding Path=ConnectedInstruments}" HorizontalAlignment="Left"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Button Height="60" VerticalAlignment="Top"> 
       <Button.ContentTemplate> 
        <DataTemplate> 
         <StackPanel> 
          <TextBlock Text="{Binding Path=ModelCode}" /> 
          <TextBlock Text="{Binding Path=SerialNumber}" /> 
         </StackPanel> 
        </DataTemplate> 
       </Button.ContentTemplate> 
      </Button> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Ни TextBlock управления в ButtonDataTemplate в настоящее время заполнены. Я понимаю, что это имеет какое-то отношение к пути Binding, однако я не понимаю, что я делаю неправильно. Может ли кто-нибудь поставить меня на правильный путь, пожалуйста?

EDIT

public class Instrument 
{ 
    public string ModelCode { get; set; } 
    public string SerialNumber { get; set; } 
} 

public class ViewModel 
{ 
    public ObservableCollection<Instrument> ConnectedInstruments { get; set; } 
} 

Я знаю, что ItemsControl является Binding правильно с ObservableCollection, как показываются правильный подсчет Button управления, только шаблонный данные отсутствуют.

+0

Не могли бы вы также указать структуру данных? Viewmodel –

+0

@VidasVasiliauskas - Я добавил код в вопрос – Unflux

+0

Вы устанавливаете эти значения во время выполнения после применения привязки? Также вам не нужен атрибут Path просто написать Text = "{Binding ModelCode}" –

ответ

1

Любые конкретные причины, по которым вам необходимо использовать ContentTemplate вместо прямого задания кнопки Content. :

<ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <Button Height="60" VerticalAlignment="Top"> 
      <StackPanel> 
       <TextBlock Text="{Binding Path=ModelCode}" /> 
       <TextBlock Text="{Binding Path=SerialNumber}" /> 
      </StackPanel> 
     </Button> 
    </DataTemplate> 
</ItemsControl.ItemTemplate> 
+0

Наверное, потому что я маппет? Хорошо, что работает. – Unflux

+0

Я не понимаю, моя ограниченная английская возможность подозревается :) В любом случае это работает – har07

+0

Это вежливый способ назвать себя идиотом. Благодарю. [: – Unflux

Смежные вопросы