C# WPF。MVVM。将子项添加到dataTemplate中包含的网格

C# WPF。MVVM。将子项添加到dataTemplate中包含的网格,c#,wpf,mvvm,C#,Wpf,Mvvm,我想使用一个数据模板来显示来自四个不同摄像头的视频源。我的数据模板如下所示: <DataTemplate x:Key="MultiViewTemplate"> <Grid x:Name="MultiViewGrid" ShowGridLines="True" > <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> &l

我想使用一个数据模板来显示来自四个不同摄像头的视频源。我的数据模板如下所示:

<DataTemplate x:Key="MultiViewTemplate">
    <Grid x:Name="MultiViewGrid" ShowGridLines="True" >
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid x:Name="GridVideo1" Grid.Column="0" Grid.Row="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
            <Image x:Name="imageMultiVideoStreaming1" Margin="1" Source="/app;component/Images/No_image_available.png" />
        </Grid>
        <Grid x:Name="GridVideo2" Grid.Column="1" Grid.Row="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
            <Image x:Name="imageMultiVideoStreaming2" Margin="1" Source="/app;component/Images/No_image_available.png" />
        </Grid>
        <Grid x:Name="GridVideo3" Grid.Column="0" Grid.Row="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
            <Image x:Name="imageMultiVideoStreaming3" Margin="1" Source="/app;component/Images/No_image_available.png" />
        </Grid>
        <Grid x:Name="GridVideo4" Grid.Column="1" Grid.Row="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
            <Image x:Name="imageMultiVideoStreaming4" Margin="1" Source="/app;component/Images/No_image_available.png" />
        </Grid>
    </Grid>
</DataTemplate>

...

<Grid x:name"MainGrid" >
   <ContentControl x:Name="CameraContainer" Content="{Binding}" ContentTemplate=Value="{StaticResource MultiViewTemplate}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />
</Grid>
    ...GridVideo1.Children.Add(VideoStreamingGrid1)
    ...GridVideo2.Children.Add(VideoStreamingGrid2)
    ...GridVideo3.Children.Add(VideoStreamingGrid3)
    ...GridVideo4.Children.Add(VideoStreamingGrid4)
但我想这样做:

<DataTemplate x:Key="MultiViewTemplate">
    <Grid x:Name="MultiViewGrid" ShowGridLines="True" >
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid x:Name="GridVideo1" Grid.Column="0" Grid.Row="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
            <Image x:Name="imageMultiVideoStreaming1" Margin="1" Source="/app;component/Images/No_image_available.png" />
        </Grid>
        <Grid x:Name="GridVideo2" Grid.Column="1" Grid.Row="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
            <Image x:Name="imageMultiVideoStreaming2" Margin="1" Source="/app;component/Images/No_image_available.png" />
        </Grid>
        <Grid x:Name="GridVideo3" Grid.Column="0" Grid.Row="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
            <Image x:Name="imageMultiVideoStreaming3" Margin="1" Source="/app;component/Images/No_image_available.png" />
        </Grid>
        <Grid x:Name="GridVideo4" Grid.Column="1" Grid.Row="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
            <Image x:Name="imageMultiVideoStreaming4" Margin="1" Source="/app;component/Images/No_image_available.png" />
        </Grid>
    </Grid>
</DataTemplate>

...

<Grid x:name"MainGrid" >
   <ContentControl x:Name="CameraContainer" Content="{Binding}" ContentTemplate=Value="{StaticResource MultiViewTemplate}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />
</Grid>
    ...GridVideo1.Children.Add(VideoStreamingGrid1)
    ...GridVideo2.Children.Add(VideoStreamingGrid2)
    ...GridVideo3.Children.Add(VideoStreamingGrid3)
    ...GridVideo4.Children.Add(VideoStreamingGrid4)
我该怎么做


谢谢。

尝试执行类似于
(CameraContainer.Template.FindName(“GridVideo1”,CameraContainer)作为网格)的操作。Children.Add(VideoStreamingGrid1)
。mvvm的方法是不在代码隐藏中创建任何控件。好吧,你可以使用大多数视频API的输出作为Imagesource,也许在你的代码中有一个可写的位图?谢谢@user1672994,我已经尝试过了,但是(CameraContainer.Template.FindName(“GridVideo1”,CameraContainer)作为Grid)永远是空的。您的方法很好,我认为这是正确的方法,我正在尝试了解结果为空的原因。尝试执行类似于
(CameraContainer.Template.FindName(“GridVideo1”,CameraContainer)的操作作为网格)。Children.Add(VideoStreamingGrid1)
。mvvm的方法是不在代码隐藏中创建任何控件。好吧,你可以使用大多数视频API的输出作为Imagesource,也许在你的代码中有一个可写的位图?谢谢@user1672994,我已经尝试过了,但是(CameraContainer.Template.FindName(“GridVideo1”,CameraContainer)作为Grid)永远是空的。你的方法很好,我认为这是正确的方法,我想知道为什么结果是空的。