如何将控件绑定到datatemplate的不同源

时间:2015-04-20 21:42:34

标签: c# wpf xaml listbox windows-8.1

我有一个简单的设计,有几个hubsections,我想在Grid中显示一个ListBox。 ListBox本身将包含两个元素:TextBlock和TextBox。 每个HubSection中的TextBlock将显示相同的属性,因此数据绑定非常简单。但是,TextBox应在每个单独的HubSection中显示不同的属性。我迷路了,甚至不知道我该怎么办。 这是我的XAML代码:

<Page.Resources>
    <ResourceDictionary>
        <DataTemplate x:Key="BaseGridTemplate">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="auto"></ColumnDefinition>
                    <ColumnDefinition Width="12"></ColumnDefinition>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <TextBlock                         
                       Text="{Binding PlayerName}"
                       FontSize="28"/>
                <TextBox Text="{Binding OtherProperty, Mode=TwoWay}" 
                         Background="Lavender" FontSize="28"
                         Grid.Column="2">                                           
                </TextBox>
            </Grid>
        </DataTemplate>                   
    </ResourceDictionary>
</Page.Resources>

然后在我的HubSections中,我想使用上面的模板来显示数据,如:

       <HubSection Width="350" x:Uid="Test" Header="Test">
            <DataTemplate>
                <ListBox x:Name="TestListBox"  Grid.Column="1"
                         ItemsSource="{Binding}"
                         ItemTemplate="{StaticResource BaseGridTemplate}" 
                         >    
                </ListBox>
            </DataTemplate>
        </HubSection>

在我的UI中,两个属性(PlayerName和OtherProperty)都正确显示。但我想要做的是绑定到TextBox的不同属性(即与OtherProperty不同)。 我真的不知道如何继续,或者甚至是否可能。

我认为我可以在参考资料部分中定义我的TextBox,如:

<TextBox Text="{Binding, Mode=TwoWay}">

然后希望我能在HubSection部分添加一些内容吗?

1 个答案:

答案 0 :(得分:0)

假设您有办法知道何时必须使用不同的属性,我认为最好的方法是使用模板选择器并根据您要显示的内容设置不同类型的模板。 另一种方法是使用TextBox的值转换器并使用您建议的绑定:

 <TextBox Text="{Binding, Mode=TwoWay, Converter={StaticResource YourConverter}">

这些只是让你入门的一些想法,另一个重要的事情是你是否试图在同一个对象上使用不同的属性?