XAML嵌套DataTemplate数据绑定

时间:2014-02-13 13:49:08

标签: wpf xaml data-binding mvvm binding

我有一个ItemsControl,其ItemsSource设置为BindingObservableCollection ViewModel。我在其Button中使用ItemTemplate控件来显示我的数据,我在DataTemplate中使用了Button,并且没有Binding数据正在显示。以下是有问题的XAML:

<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 Button中的DataTemplate个控件。我理解这与Binding路径有关,但是我不知道我做错了什么。有人可以让我走上正轨吗?

修改

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

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

我知道ItemsControlBinding正确ObservableCollection正在显示Button控件的正确计数,只有模板化数据丢失。

1 个答案:

答案 0 :(得分:2)

您需要使用ContentTemplate而不是像这样直接设置Button 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>