我正在开发Windows 8.1 apps
,
我正在关注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>
Since View (XAML) is not allowed to know the Control.
实现它的正确方法是什么?
答案 0 :(得分:1)
评论中的wordpress博客使用了数据触发器,这在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;
}
}
然后在DataTemplate中,将您的UserControl作为孩子。当没有内容绑定到ContentControl时,这将不显示任何内容,否则将显示提供的DataTemplate。您需要在包含此ContentControl内容的主要ViewModel中拥有一个属性,但是,只需要fyi。
编辑:如果你动态添加多个项目,那么你需要一个ObservableCollection&lt;&gt; ViewModel上的属性,并使用ItemsControl而不是ContentControl。