[我的主要想法是为用户控件设置可见/隐藏。我使用WPF和Mvvmcross。]
我有一个用户控件调用SpinningWheelUserControl。我想用datatrigger来显示/隐藏它。下面是我在App.xaml中的xaml代码
在App.xaml中,我添加了usercontrol的命名空间,如下所示。
xmlns:local="clr-namespace:UserControl"
以下是我的usercontrol的样式设置。
<Style x:Key="SpinningWheel" TargetType="{x:Type local:SpinningWheelUserControl}" >
<Style.Triggers>
<DataTrigger Binding="{Binding IsVisible}" Value="true">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding IsVisible}" Value="false">
<Setter Property="Visibility" Value="Hidden" />
</DataTrigger>
</Style.Triggers>
</Style>
SpinningWheel有一个课程
public class SpinningWheelViewModel
: MvxNotifyPropertyChanged
{
public bool IsVisible { get; set; }
}
在父类的构造函数中,我使用这个代码
SpinningWheel = new SpinningWheelViewModel();
SpinningWheel.IsVisible = false;
首次运行时隐藏了usercontrol。但是当我将IsVisble更改为true时,它没有任何变化。
SpinningWheel.IsVisible = true
答案 0 :(得分:3)
您需要设置Visibility
而不是IsVisible
,如下所示:
SpinningWheel.Visibility = Visibility.Visible;
哦,现在我明白了,您正在设置自定义IsVisibility
而不是UIElement属性。
您的代码问题是您没有引发PropertyChanged
让UI知道底层源对象中的某些属性发生了变化。
private bool isVisible;
public bool IsVisible
{
get { return isVisible;}
set
{
if(isVisible != value)
{
isVisible = value;
RaisePropertyChanged("IsVisible");
}
}
}
假设您已在班级上实施INotifyPropertyChanged。
答案 1 :(得分:1)
这个名为N=34 : a data-bound busy dialog的n + 1视频详细说明了如何做你想做的事。