2015-01-19 2 views
0

У меня есть DataTemplate в App.xaml:Связывание с DataTemplate динамически создается UserControl Property

<DataTemplate DataType="{x:Type local2:DirectoryFilesViewModel}"> 
      <StackPanel Orientation="Vertical"> 
       <StackPanel Orientation="Horizontal" Height="Auto"> 
        <TextBlock DockPanel.Dock="Top"><Hyperlink Style="{StaticResource ButtonHype}" 
        Command="{Binding ClickCommand}"><InlineUIContainer> 
        <Image Source="{Binding FolderImage}" VerticalAlignment="Center" Stretch="Uniform" 
         RenderOptions.BitmapScalingMode="HighQuality" RenderTransformOrigin=".5,.5" 
         ToolTip="Disc" Margin="7,9,0,0" Height="27" /> 
       </InlineUIContainer></Hyperlink></TextBlock> 
        <TextBlock Text="{Binding DiscName}" FontSize="2" Margin="8,10,0,0"> 
         <TextBlock.Style> 
          <Style TargetType="TextBlock"> 
           <Style.Triggers> 
            <EventTrigger RoutedEvent="Loaded"> 
             <EventTrigger.Actions> 
              <BeginStoryboard> 
               <Storyboard> 
                <DoubleAnimation Duration="0:0:0.7" Storyboard.TargetProperty="FontSize" To="20" /> 
               </Storyboard> 
              </BeginStoryboard> 
             </EventTrigger.Actions> 
            </EventTrigger> 
           </Style.Triggers> 
          </Style> 
         </TextBlock.Style> 
        </TextBlock> 
       </StackPanel> 
       <ListBox ItemsSource="{Binding DiscFiles}" > 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <controls:MemberListItem /> // Need to bind to a TextBlock in this Control 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 
      </StackPanel> 
/DataTemplate> 

Все отлично, кроме ListBox UserControl ... как не могу Привязать к TextBlock внутри него. Может ли кто-нибудь указать мне в правильном направлении?

UserControl:

<UserControl x:Class="Music.Controls.MemberListItem" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local2="clr-namespace:MusicMurfer.ViewModels" 
     mc:Ignorable="d" 
     d:DesignHeight="30" d:DesignWidth="300" Height="32" Width="Auto"> 
<!--<UserControl.DataContext> 
    <local2:MemberListViewModel /> 
</UserControl.DataContext>--> 
<Grid VerticalAlignment="Top"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 

    <Image HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="0" Grid.Column="0" 
      Source="{Binding DiscFileImage}" RenderOptions.BitmapScalingMode="HighQuality" Height="15" 
      Margin="-2,5,5,5" Stretch="Uniform" RenderTransformOrigin=".5,.5" /> 

    <TextBlock Grid.Column="1" Width="Auto" Foreground="White" TextAlignment="Left" 
       VerticalAlignment="Center" FontSize="6" x:Name="FileText" Margin="5,5,5,5" 
       Height="Auto" ToolTip="Click to Play" Text="{Binding ThisDoesntWorkYet}"> 

     <TextBlock.Style> 
      <Style TargetType="TextBlock"> 
       <Style.Triggers> 
        <EventTrigger RoutedEvent="Loaded"> 
         <EventTrigger.Actions> 
          <BeginStoryboard> 
           <Storyboard> 
            <DoubleAnimation Duration="0:0:0.4" Storyboard.TargetProperty="FontSize" To="16" /> 
           </Storyboard> 
          </BeginStoryboard> 
         </EventTrigger.Actions> 
        </EventTrigger> 
       </Style.Triggers> 
      </Style> 
     </TextBlock.Style> 
    </TextBlock> 
</Grid> 

SO жалуется в основном код - детали нужно

ответ

0

В фактическом контроле «MemberListItem», вам необходимо установить связывание текстового свойства текстового поля для данных член, который будет присутствовать в datacontext пользовательского элемента управления (который является конкретным членом в коллекции DiscFiles).

Так что, если ваш пользовательский элемент управления является что-то вроде:

<UserControl> 
    <TextBlock Text="{Binding DiscFileName, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" /> 
</UserControl> 

Заменить "DiscFileName" со свойством "Name" на объекте DiscFile. Вы не привязываете текст к фактическому экземпляру User Control внутри DataTemplate.

+0

Это будет работать. В зависимости от того, что вам нужно, вам также придется искать DependencyProperties. Они могут пригодиться – user853710

+0

"элемент данных, который будет присутствовать в datacontext пользовательского элемента управления" – cablehead

+0

", который будет присутствовать в datacontext пользовательского элемента управления. Есть два разных DataContexts - один для TorrentControl (где MListItem), а другой для элемента MemberListItem - собственного ViewModel. Должен ли я попытаться поместить DP в TorrentControlViewModel и использовать эту ViewModel для виртуальной машины MemberList? – cablehead

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