我正在尝试在我的Button
上设置多个DataTriggers
。我进行了一些研究,发现MultiDataTrigger
允许您这样做。如果CCTVPath == string.Empty
或者PermissionsFlag == false
,我希望将Button
的Visibility
属性设置为false。目前这是我的代码:
<Button Grid.Column="3" x:Name="cctvFeedButton" Content="Live Feed"
Width="100" FontSize="16" HorizontalAlignment="Right" Margin="5" Click="OnCCTVButtonClick">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding CCTVPath}" Value=""/>
<Condition Binding="{Binding PermissionsFlag}" Value="False"/>
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Hidden"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
然后在我的代码后台中,我这样设置PermissionsFlag
;
public bool PermissionsFlag { get; set; }
private void OnPageLoaded(object sender, RoutedEventArgs e)
{
PermissionsFlag = false;
}
正如您所看到的,PermissionsFlag
明显为 false,而且 CCTVPath
明显为空,但是 Button
从未被隐藏。我做错了什么吗?
更新:
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private bool _permissionsFlag;
public bool Flag
{
get { return _permissionsFlag; }
set
{
_permissionsFlag = value;
OnPropertyChanged("PermissionsFlag");
}
}
private void OnPageLoaded(object sender, RoutedEventArgs e)
{
Flag = false;
CCTVImageCollection = GetImages();
imageListBox.ItemsSource = CCTVImageCollection;
DataContext = this;
}
在我的 XAML 中:
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding PermissionsFlag}" Value="False">
<Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
CCTVPath
的DataTrigger
,那么它仍然不能按照我的期望工作。我是否可以添加一个方法来解决这个问题,或者需要创建一个全新的类来触发事件?你手头上有好的例子吗? - CBreezeOnLoaded
方法中,我使用DataContext = this;
。PermissionsFlag
只是在页面内部使用public bool PermissionsFlag { get; set; }
进行设置。 - CBreezeOnPropertyChanged("PermissionsFlag");
应该改为OnPropertyChanged("_permissionsFlag");
吗?这是否意味着我还需要修改<DataTrigger Binding="{Binding PermissionsFlag}" Value="False">
? - CBreeze