Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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# “绑定不工作”复选框_C#_Wpf - Fatal编程技术网

C# “绑定不工作”复选框

C# “绑定不工作”复选框,c#,wpf,C#,Wpf,嗨 我在WPF中设置了复选框,但绑定无法正常工作。我选中了我创建的列表,它包含正确格式的数据,但当我使用列表框绑定时,它无法正常工作 列表框中仅显示最后一项列表中的项目次数 复选框列表XML <ListBox x:Name="list" Margin="18,100,535,74"> <ListBox.ItemTemplate> <HierarchicalDataTemplate> <my:RibbonCheckBox

嗨 我在WPF中设置了复选框,但绑定无法正常工作。我选中了我创建的列表,它包含正确格式的数据,但当我使用列表框绑定时,它无法正常工作

列表框中仅显示最后一项列表中的项目次数

复选框列表XML

<ListBox x:Name="list" Margin="18,100,535,74">
   <ListBox.ItemTemplate>
      <HierarchicalDataTemplate>
        <my:RibbonCheckBox Label="{Binding Name}" IsChecked="{Binding IsChecked}"  />                        
      </HierarchicalDataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
按钮填充列表框

private void button1_Click(object sender, RoutedEventArgs e)
{
  List<CheckedListItem> AvailablePresentationObjects = new List<CheckedListItem>();
  CheckedListItem item = new CheckedListItem();
  for (int i = 0; i < 10; i++)
  {
    item.Id = i;
    item.Name = i.ToString();
    item.IsChecked = false;
    AvailablePresentationObjects.Add(item);
  }
  list.ItemsSource = AvailablePresentationObjects;
}
private void按钮1\u单击(对象发送者,路由目标)
{
List AvailablePresentationObjects=新列表();
CheckedListItem=新的CheckedListItem();
对于(int i=0;i<10;i++)
{
项目Id=i;
item.Name=i.ToString();
item.IsChecked=false;
可用的表示对象。添加(项);
}
list.ItemsSource=可用的表示对象;
}

实例化您的
CheckedListItem=new CheckedListItem()在for循环之外,并且只初始化您编辑了10次的
CheckedListItem
的一个实例。只剩下最后一次编辑

您还将这个非常相同的实例添加到
AvailablePresentationObjects
中10次

请尝试以下操作:

  for (int i = 0; i < 10; i++)
  {
    CheckedListItem item = new CheckedListItem();
    item.Id = i;
    item.Name = i.ToString();
    item.IsChecked = false;
    AvailablePresentationObjects.Add(item);
  }
for(int i=0;i<10;i++)
{
CheckedListItem=新的CheckedListItem();
项目Id=i;
item.Name=i.ToString();
item.IsChecked=false;
可用的表示对象。添加(项);
}

实例化您的
CheckedListItem=new CheckedListItem()在for循环之外,并且只初始化您编辑了10次的
CheckedListItem
的一个实例。只剩下最后一次编辑

您还将这个非常相同的实例添加到
AvailablePresentationObjects
中10次

请尝试以下操作:

  for (int i = 0; i < 10; i++)
  {
    CheckedListItem item = new CheckedListItem();
    item.Id = i;
    item.Name = i.ToString();
    item.IsChecked = false;
    AvailablePresentationObjects.Add(item);
  }
for(int i=0;i<10;i++)
{
CheckedListItem=新的CheckedListItem();
项目Id=i;
item.Name=i.ToString();
item.IsChecked=false;
可用的表示对象。添加(项);
}

您只创建一个CheckedListItem,然后运行每个i更改单个CheckedListItem您需要在列表中的CheckedListItems中循环,将相关的i应用于每个i。

您只创建一个CheckedListItem,然后运行每个i更改单个CheckedListItem需要循环检查列表中的CheckedListItems,并将相关的i应用于每个项目。

好的,这很有效,但逻辑是什么?比如为什么我们要创建新实例?当它更新时。并且可用的PresentationObjects包含正确的值如果您想要10个CheckedListItem实例,则需要创建10个(新关键字)。否则你只有1个。您一直在编辑第一个实例。好吧,这很有效,但逻辑是什么?比如为什么我们要创建新实例?当它更新时。并且可用的PresentationObjects包含正确的值如果您想要10个CheckedListItem实例,则需要创建10个(新关键字)。否则你只有1个。您一直在编辑第一个实例。