我有填充了几个ListBox中项的ListBox控件。 每个项都包含一个“继续”按钮和“推迟”按钮。 我愿再次“推迟”按键来隐藏列表框项目(如呈现在我的情况下,行)。 我目前的代码似乎并没有产生任何影响。
XAML:
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding PostponeClicked}" Value="1">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
C#:
private void PostponeThirdPartyUpdatesButton_Click(object sender, RoutedEventArgs e)
{
DataTrigger d = new DataTrigger();
d.Binding = new Binding("PostponeClicked");
d.Value = 1;
var context = ((FrameworkElement)sender).DataContext as Tuple<RegScan_ThirdParty.InstalledApplicationFromRegistryScan, RegScan_ThirdParty.ManifestRequiredApplication, RegScan_ThirdParty.RequiredApplicationState>;
Button ThirdPartyPostponeButton = sender as Button;
ThirdPartyPostponeButton.IsEnabled = false;
if (context != null)
{
RegScan_ThirdParty.registryApplicationPostponeWorkflow(context);
}
ThirdPartyPostponeButton.IsEnabled = true;
}
我必须解决同样的事情一次。 在列表框中每个项目应该是一个对象。 我们叫它MyObject
现在,因为我不知道你的对象类型是什么。 在为MyObject类,你把你的继续和推迟的命令。
//ViewModelBase implements INotifyPropertyChanged, which allows us to call RaisePropertyChanged, and have the UI update
class MyObject : ViewModelBase
{
private bool isNotPostponed = true;
public bool IsNotPostponed
{
get { return isNotPostponed; }
set
{
isNotPostponed = value;
RaisePropertyChanged("IsNotPostponed");
}
}
private Command postponeCommand;
public Command PostponeCommand
{
get
{
if (postponeCommand == null)
postponeCommand = new Command(PostponeCommand);
return postponeCommand;
}
}
private void Postpone(object x)
{
IsNotPostponed = false;
}
//similar code for Proceed Command
}
然后在显示列表框中的视图的视图模型,创建可以绑定到你的列表框(或其他征收要使用)的列表。 我把它叫做在下面的XAML MyObjectsList。 (我不显示视图模型代码中这个对象的生活,但我以为你有绑定到ListBox的代码。)然后在你的ItemsControl.ItemTemplate,绑定到列表中的每个MyObject来。
<ItemsControl ItemsSource="{Binding MyObjectsList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<DataTemplate.Resources>
<BooleanToVisibilityConverter x:Key="boolToVis"/>
</DataTemplate.Resources>
<StackPanel Visibility="{Binding IsNotPostponed, Converter={StaticResource boolToVis}}">
<Button Command="{Binding PostponeCommand}" Content="Postpone"/>
<Button Command="{Binding ProceedCommand}" Content="Proceed"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
当推迟被点击时,该命令将执行推迟(),其将设置IsNotPostponed为false。 在IsNotPostponed设置为false,RaisePropertyChanged告诉IsNotPostponed改变UI(您需要实现INotifyPropertyChanged接口。)最后,当UI得到变更通知,将其转换的布尔的能见度。 真=>可见,假=>崩溃了。