Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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
C# MVVM-在网格中添加现有用户控件(XAML)_C#_Xaml_Mvvm_Windows Store Apps - Fatal编程技术网

C# MVVM-在网格中添加现有用户控件(XAML)

C# MVVM-在网格中添加现有用户控件(XAML),c#,xaml,mvvm,windows-store-apps,C#,Xaml,Mvvm,Windows Store Apps,我正在开发一个Windows 8.1应用程序 我遵循的是MVVM模式 我在应用程序中有一个网格 <Grid Name="g1"> 其中需要添加一个现有的用户控件 <UserControl x:Class="CaptureApp.UIComponents.PlayVideo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schema

我正在开发一个
Windows 8.1应用程序

我遵循的是
MVVM
模式

我在应用程序中有一个网格

<Grid Name="g1">

其中需要添加一个现有的用户控件

<UserControl
    x:Class="CaptureApp.UIComponents.PlayVideo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:CaptureApp.UIComponents"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300"
    d:DesignWidth="400">

    <Grid>
        <MediaElement Name="MediaPlay" >

        </MediaElement>
    </Grid>
</UserControl>

因为不允许视图(XAML)知道控件。


正确的实现方法是什么?

评论中的wordpress博客使用了datatrigger,这在windows应用商店应用程序中不存在

如果我正确理解了您的问题,那么您正在尝试在网格中有一个有条件加载的视图,这样当用户控件没有数据时,它就不会在网格中呈现

您可以通过使用

<ContentControl Content="{Binding PropertyOnViewModel}" ContentTemplateSelector="{StaticResource SomeContentTemplateSelector}" />. 

public class SomeContentTemplateSelector : DataTemplateSelector
{
  public DataTemplate SomeTemplate {get;set;}

  protected override DataTemplate SelectTemplate(object item, DependencyObject container)
  {
    if (item is null)
      return null;
    return SomeTemplate;
  }
}
。
公共类SomeContentTemplateSelector:DataTemplateSelector
{
公共数据模板SomeTemplate{get;set;}
受保护的覆盖数据模板SelectTemplate(对象项,DependencyObject容器)
{
如果(项为空)
返回null;
返回模板;
}
}
然后在DataTemplate中,将UserControl作为子级。当没有内容绑定到ContentControl时,这将不显示任何内容,否则将显示提供的DataTemplate。不过,您需要在over-arching ViewModel中有一个包含此ContentControl内容的属性,仅供参考


编辑:如果要动态添加多个项,则需要ViewModel上的ObservableCollection属性,并使用ItemsControl而不是ContentControl。

我不理解您的问题。是什么阻止您在中声明usercontrol?是的,我可以在网格中添加usercontrol,并在mvvm中处理它的可见性,但是当应用程序启动时,用户控件将与主应用程序一起加载。是否要在单击按钮上创建用户控件的新实例。请尝试查看。它应该给你一个如何正确使用它的想法。