2016-06-10 192 views
0

我在我的UI中有10个按钮,当我按下其中一个按钮时,我需要禁用其余的按钮;但这里是棘手的部分:刷新后更新按钮状态wpf

我有一个后台线程运行在实时更新的while循环下。 后台线程更新UI(10个按钮状态和其他东西),事情是一旦我点击所有的按钮被禁用(好),但刷新停止按钮上工作(他们保持禁用)。

为什么我需要禁用按钮知道他们将在一秒钟后改变状态?因为同步数据效率不高,所以有0.5秒的差距(从数据库获取数据并更新用户界面),并且在0.5秒内,用户可以按下一些他不应该按的按钮。

<Button Name="FirstGo" Width="60" Content="{StaticResource ButtonText_Go}" Click="FirstGoButtonClick" IsEnabled="{Binding First.JobLight,Converter={StaticResource JobLight2ButtonConv}}"/> 

private void FirstGoButtonClick(object sender, RoutedEventArgs e) 
     { 
      FirstStop.IsEnabled = false; 

      SecondGo.IsEnabled = false; 
      SecondStop.IsEnabled = false; 

      //..... disabeling the other 6 

      //doing some stuff 
      ViewModel.RunFirstJob(); 
     } 
+0

您正在禁用“FirstGoButtonClick”事件中的所有按钮,但您又将其全部启用了哪些按钮? – SWilko

+0

我有一个属性“First.JobLight”绑定一个转换器,这个属性,都会通过我的后台线程更新,并讲述了女巫状态下的按钮,他应该是: 的IsEnabled =“{结合First.JobLight,转换器= {StaticResource的JobLight2ButtonConv} } 的想法是,如果我点击一个按钮,然后 - >禁用所有按钮,直至发生刷新和重置他们INTIAL状态是现在很清楚 –

+0

'First.JobLight'需要实现'INotifyPropertyChanged'和价值?需要改变该转换器可以运行。如果你在哪里工作'JobLight'改变你会发现你的问题 – SWilko

回答

1
FirstStop.IsEnabled = false; 

该代码去除结合,所以,后续的更新值到JobLight不会被框架被识别。

你可以做的是使用SetCurrentValue

或者将按钮集合放入选择器中,并在SelectionChanged发生时处理JobLight属性。

+0

完美,谢谢! –