Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 绑定到DataTemplate动态创建的UserControl属性_Wpf_Mvvm - Fatal编程技术网

Wpf 绑定到DataTemplate动态创建的UserControl属性

Wpf 绑定到DataTemplate动态创建的UserControl属性,wpf,mvvm,Wpf,Mvvm,我在App.xaml中有一个数据模板: <DataTemplate DataType="{x:Type local2:DirectoryFilesViewModel}"> <StackPanel Orientation="Vertical"> <StackPanel Orientation="Horizontal" Height="Auto"> <TextBl

我在App.xaml中有一个数据模板:

<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 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>


因此,在实际的“MemberListItem”控件中,您需要将TextBox的text属性绑定到将出现在用户控件(DiscFiles集合中的特定成员)的datacontext上的数据成员

因此,如果您的用户控件类似于:

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


用DiscFile对象上的“Name”属性替换“DiscFileName”。您没有将文本绑定放在DataTemplate内的用户控件的实际实例上。

这将起作用。根据您的需要,您可能还必须查看DependencyProperties。它们可能会派上用场“将出现在用户控件的datacontext上的数据成员”“将出现在用户控件的datacontext上的数据成员”有两个不同的datacontext—一个用于TorrentControl(创建MListItem的位置),另一个用于MemberListItem—它自己的ViewModel。我是否应该尝试在TorrentControlViewModel中放置一个DP,并将该ViewModel用于MemberList VM?您是否可以发布用户控件“MemberListItem”的XAML?一个对象不可能有两个数据上下文。可以指定与祖先datacontext的相对绑定,但控件不能有多个数据上下文。MemberListItem控件的datacontext是“DiscFiles”集合中的一个对象(无论该对象类型是什么),您需要将用户控件中的文本=“{Binding ThisDoesntWorkYet}”从“ThisDoesntWorkYet”更改为您试图在“DiscFiles”的特定项上绑定的任何属性。例如,如果DiscFiles是类型为“DiscFile”的列表,并且每个“DiscFile”都有属性字符串“Name”,则可以在用户控件中将文本框文本绑定设置为Text=“{binding Name}”