2015-04-20 3 views
0

У меня есть простой дизайн с несколькими узлами, в которые я хочу отображать ListBox внутри Grid. Сам ListBox будет содержать два элемента: TextBlock и TextBox. TextBlock в каждом HubSection будет отображать одно и то же свойство, поэтому привязка данных довольно проста. Тем не менее, TextBox должен отображать другое свойство в каждом отдельном HubSection. Я потерян и даже не знаю, как я должен действовать. Вот мой XAML код:Как связать элементы управления с разными источниками с помощью datatemplate

<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 части?

+0

Google datacontext. Вы можете привязать datacontext к объекту, который имеет нужные значения, а затем используя привязку TextBox к члену этого объекта. – CalebB

ответ

0

Предполагая, что у вас есть способ узнать, когда вы должны использовать свои разные свойства, я думаю, что лучший способ сделать это - использовать селектор шаблонов и иметь разные типы шаблонов на основе того, что вы хотите отобразить. Другой альтернативой было бы использовать преобразователь значений для TextBox и использовать связывание вы предложили:

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

Это лишь некоторые идеи, чтобы вы начали, еще одна важная вещь, чтобы знать, если вы пытаетесь использовать различные свойство на том же объекте?

+0

Thaks пытается помочь. Я проверю ваше предложение как можно скорее. Возможно, я должен дать некоторую точность свойствам, к которым я хочу привязать. Все они из одного класса Players.cs, который содержит 8 свойств (таких как Players.playerName; Players.playerScore1; Players.playerScore2 и т. Д.). Трудность состоит в том, что мне приходится привязываться к одному и тому же свойству Players.playerName в каждом разделе, но затем к другому свойству в TextBox (так что простой datacontext не работает) – Mike

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