Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将列表框绑定到WPF中的ObservableCollection_C#_Wpf_Binding_Listbox_Observablecollection - Fatal编程技术网

C# 将列表框绑定到WPF中的ObservableCollection

C# 将列表框绑定到WPF中的ObservableCollection,c#,wpf,binding,listbox,observablecollection,C#,Wpf,Binding,Listbox,Observablecollection,我有一个名为Layer2Info的类 public class Layer2Info { public ObservableCollection<totalAvailablePorts> availableClientPorts = new ObservableCollection<totalAvailablePorts>(); } 在availableClientPorts中创建数据的步骤是: for (int i = 1; i

我有一个名为Layer2Info的类

    public class Layer2Info
{
    public ObservableCollection<totalAvailablePorts> availableClientPorts = new ObservableCollection<totalAvailablePorts>();
}
在availableClientPorts中创建数据的步骤是:

            for (int i = 1; i <= 3; i++)
        {
            totalAvailablePorts newPort = new totalAvailablePorts();
            newPort.portID = i;
            newPort.isSelected = false;
            layer2InfoConfig.availableClientPorts.Add(newPort);              
        }
最后是我的xaml:

<ListBox x:Name="clientPortsList" 
         SelectionMode="Extended" 
         DisplayMemberPath="{Binding Path=portID}" 
         SelectedValuePath="{Binding Path=isSelected}" 
         Height="50"/>
现在,我可以看到列表框中的所有端口1-3,但我想做的是,在列表框中选择的每一行上,我希望availableClientPorts中的isSelected值更改为true,我不知道从何处开始。 有什么建议吗?

首先,这不是你想的。它获取或设置用于从SelectedItem获取SelectedValue的路径。因此,当用户选择一个项目时,clientPortsList将获取它自己的SelectedItem的属性,并从clientPortsList.SelectedValue返回该属性的值。对于multi-select,这对您来说不是一个真正有用的概念,而且无论如何,它与您在这里提出的问题无关

您要做的是,对于每个TotalAvailableReports实例,将该实例的isSelected属性绑定到拥有它的ListBoxItem的isSelected属性。您可以使用项目模板来实现这一点,但如果您对重新创建或更改默认的ListBoxItem视觉行为不感兴趣,则样式更简单、更好。答案是:

对于ListBoxItem实例,它们的DataContext将是各自的TotalAvailableReports实例,因此isSelected小写I将在范围内

clientPortsList.ItemsSource = layer2InfoConfig.availableClientPorts;
<ListBox x:Name="clientPortsList" 
         SelectionMode="Extended" 
         DisplayMemberPath="{Binding Path=portID}" 
         SelectedValuePath="{Binding Path=isSelected}" 
         Height="50"/>
<ListBox ItemsSource="..."
    x:Name="clientPortsList" 
    SelectionMode="Extended" 
    DisplayMemberPath="{Binding Path=portID}" >
  <ListBox.ItemContainerStyle>
   <Style TargetType="{x:Type ListBoxItem}">
     <!-- binding totalAvailablePorts.isSelected to ListBoxItem.IsSelected -->
     <Setter Property="IsSelected" Value="{Binding isSelected}"/>
   </Style>
  </ListBox.ItemContainerStyle>
 </ListBox>