<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肯定是假的,并且肯定是空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>解决方法 将条件转换为两个独立的DataTriggers
<Style.Triggers> <DataTrigger Binding="{Binding CCTVPath}" Value=""> <Setter Property="Visibility" Value="HIDden"/> </DataTrigger> <DataTrigger Binding="{Binding PermissionsFlag}" Value="False"> <Setter Property="Visibility" Value="HIDden"/> </DataTrigger></Style.Triggers>
确保绑定路径正确(检查VS Output窗口是否有可能的异常消息)
另外:不要只依赖button的隐藏状态,在代码中正确实现权限(OnCCTVbuttonClick).在这里阅读原因:
How to Snoop proof your wpf application?
auto-property PermissionsFlag(public bool PermissionsFlag {get; set;})不会通知视图有关更改.
可以实现INotifyPropertyChanged接口(在我的测试窗口中它是这样完成的:公共部分类Window3:Window,INotifyPropertyChanged)然后在属性更改时引发事件.
这是一个完整的工作示例,我用于测试
public partial class Window3 : Window,INotifyPropertyChanged{ public Window3() { InitializeComponent(); this.DataContext = this; //PermissionsFlag = true; CCTVPath = "youtube.com"; } private bool _permissionsFlag = false; private string _cctvPath; public bool PermissionsFlag { get { return _permissionsFlag; } set { _permissionsFlag = value; OnPropertyChanged("PermissionsFlag"); } } public string CCTVPath { get { return _cctvPath; } set { _cctvPath = value; OnPropertyChanged("CCTVPath"); } } public event PropertyChangedEventHandler PropertyChanged; protected virtual voID OnPropertyChanged(string propertyname) { if (PropertyChanged != null) PropertyChanged(this,new PropertyChangedEventArgs(propertyname)); }}
窗口xaml:
<Window x:Class="WpfDemos.VIEws.Window3" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" title="Window3" Height="300" WIDth="300"> <StackPanel> <CheckBox name="chkPermissionsFlag" Content="PermissionsFlag" IsChecked="{Binding Path=PermissionsFlag,UpdateSourceTrigger=PropertyChanged}"/> <TextBox Text="{Binding Path=CCTVPath,UpdateSourceTrigger=PropertyChanged}"/> <button x:name="cctvFeedbutton" Content="live Feed" WIDth="100" FontSize="16" HorizontalAlignment="Right" margin="5"> <button.Style> <Style targettype="button"> <Style.Triggers> <DataTrigger Binding="{Binding Path=CCTVPath}" Value=""> <Setter Property="Visibility" Value="HIDden"/> </DataTrigger> <DataTrigger Binding="{Binding Path=PermissionsFlag}" Value="False"> <Setter Property="Visibility" Value="HIDden"/> </DataTrigger> </Style.Triggers> </Style> </button.Style> </button> </StackPanel></Window>总结
以上是内存溢出为你收集整理的c# – 使用OR而不是AND的MultiDataTrigger全部内容,希望文章能够帮你解决c# – 使用OR而不是AND的MultiDataTrigger所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)