我需要推迟渲染部分视图,直到ViewModel的属性获得某些值。我试图将Visible = Hidden
设置为某个容器,但它不起作用:无论如何都会呈现UI(但不会显示)。我想解决方案是使用DataTemplate
。我尝试了以下方法:
<ContentControl>
<DataTemplate>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding DataContext.State}" Value="0"></DataTrigger>
</DataTemplate.Triggers>
<TextBlock>Yes</TextBlock>
</DataTemplate>
</ContentControl>
但它没有用。请提示我使用DataTemplate
使用权的方法(或解决此问题的其他方法)。
答案 0 :(得分:2)
这里有棘手的问题,但这是我的看法。
我假设您正在等待初始化State
属性。添加一个布尔属性到ViewModel
,即IsStateReady
,触发PropertyChanged
:
private bool isStateReady;
public bool IsStateReady
{
get { return isStateReady; }
set
{
isStateReady = value;
OnPropertyChanged("IsStateReady");
}
}
然后,仅当Trigger
为真时,使用Template
设置IsStateReady
属性来定义您的控件:
<Control>
<Control.Style>
<Style TargetType="{x:Type Control}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsStateReady, UpdateSourceTrigger=PropertyChanged}" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<!-- your template here-->
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Control.Style>
</Control>
这应该是你的伎俩