WPF:禁用有界 ItemsControl 中的项目

WPF: Disable items in bounded ItemsControl

我正在使用以下内容处理 WPF 页面:

<ItemsControl ItemsSource="{Binding Peopl.PhoneNums}" x:Name="PhoneList">
 <ItemsControl.ItemTemplate>
   <DataTemplate>
     <Grid>
       <StackPanel Orientation="Horizontal" Margin="0,0,0,0" x:Name="PhoneEntry">
          <TextBlock Text="123-456-78901"/>
          <ComboBox ...>
       </StackPanel>
      </Grid>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
 </ItemsControl>

可以有多个堆栈面板,每个都有一个唯一的 phone 编号;在代码隐藏中,每个 phone 数字都有一个标志,指示是否应启用它;我希望能够根据该标志启用堆栈面板中的每个条目,但我无法访问它....

我有:

foreach (Phone phone in PhoneList.ItemsSource)
            {
                if (phone.ShouldBeDisabled)
                {
                    int index = PhoneList.Items.IndexOf(phone);
                    PhoneList.IsEnabled = false; 
                    //this disables the entire control; 

                    // I can't access "PhoneEntry" here... hmm
                }
            }

有没有办法一次只禁用一个条目?如何访问 PhoneEntry?我应该尝试根据绑定值禁用每个堆栈面板条目吗?

您可以反转视图模型 属性 并将其命名为 ShouldBeEnabled。现在您可以绑定 StackPanel 的 IsEnabled 属性.

<StackPanel ... IsEnabled="{Binding ShouldBeEnabled}">
    ...
</StackPanel>

如果您无法更改视图模型,您可以使用反转 属性 值的绑定转换器:

<StackPanel ... IsEnabled="{Binding ShouldBeDisabled,
                            Converter={StaticResource InverseBooleanConverter}}">
    ...
</StackPanel>

您的 Phone class 必须实现 INotifyPropertyChanged 接口并在 ShouldBeDisabled [=25= 的值时触发 PropertyChanged 事件] 变化。