【问题标题】:Unable to populate a CheckListBox with entries from a List<>无法使用 List<> 中的条目填充 CheckListBox
【发布时间】:2014-08-26 10:46:49
【问题描述】:

我有以下 XML 从中获取 ID 并将其填充到列表中:

<TestCase ID="TEST">
   <Frames>
     <Frame>ff</Frame>
     <Frame>ff 53</Frame>
   </Frames>
</TestCase>

我创建了一个List,如下:

public List<CheckedListItem> AvailableFrames;

public class CheckedListItem
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsChecked { get; set; }
}

我创建 CheckListBox 的 Xaml 如下,

<xctk:CheckListBox x:Name="ListBox_TestCase"
                   ItemsSource="{Binding AvailableFrames}"
                   SelectedMemberPath="{Binding IsChecked}"
                   SelectedValue="{Binding Name}"/>

以下是我如何将从 XML 解析的条目分配给 List,然后分配给 CheckBoxList

private void Button_TestCase_Click(object sender, RoutedEventArgs e)
{
    MessageBoxButton btn = MessageBoxButton.OK;
    try
    {
        TestCases1 = Serializer.Deserialize("TEST.xml");
        AvailableFrames = new List<CheckedListItem>();
        if (TestCases1 != null)
        {
            Int32 xx = 0;
            foreach (TestCase item in OSDPTestCases1.TestCases)
            {
                AvailableFrames.Add(new CheckedListItem() {Id = xx++, Name = item.ID, IsChecked = false });
            }
        }

        ListBox_TestCase.ItemsSource = AvailableFrames;    
    }
    catch (Exception ex)
    {
        var result = ModernDialog.ShowMessage(ex.Message, "Error", btn);
    }
}

但是,我无法获取列表 AvailableFrames 以将“名称”条目填充到 CheckBoxList 项中。它以某种方式获取条目数(在我的情况下为 5 个)并填充 5 个空的 checkList 项,但名称或“ID”中的值没有反映。

为什么List&lt;AvailableFrames&gt; 中的值没有出现在CheckBoxList 中?我猜我有一个绑定问题。

请指教。

截图:

【问题讨论】:

  • 你看过 Xceed 的 example implementation 了吗?
  • 你的意思是这里的那个,WPF Example from Xceed 是的,我做到了。
  • 不,我在评论中链接的那个。这是 Xceeds WPF Toolkit 的实时资源管理器演示。
  • 确保实现 Equals 和 GetHashCode 方法。如果不是,您可能会遇到复选框问题。

标签: c# wpf wpftoolkit checkboxlist xceed


【解决方案1】:

您以错误的方式填充 SelectedMemberPathSelectedValue 属性。不要使用{Binding} 语法,请尝试以下操作:

<xctk:CheckListBox ... ItemsSource="{Binding AvailableFrames}" SelectedMemberPath="IsChecked" DisplayMemberPath="Name" ValueMemberPath="Id"/>

【讨论】:

  • 感谢您的建议,但这也无济于事。 &lt;xctk:CheckListBox x:Name="ListBox_TestCase" HorizontalAlignment="Left" Height="115" Margin="157,10,0,0" VerticalAlignment="Top" Width="168" ItemsSource="{Binding AvailableFrames}" SelectedMemberPath="IsChecked" ValueMemberPath="Name"/&gt;
  • 抱歉,我混淆了ValueMemberPathDisplayMemberPath...请查看我的更新答案,对我有用!
  • 顺便说一句,您可以从 XAML 代码中删除 ItemsSource="{Binding AvailableFrames}" 部分,因为无论如何您都在代码中设置了列表框'ItemSource...(但这不应该影响显示问题,仅作为旁注)
  • 似乎没有区别,我仍然从列表中得到一个空条目。 &lt;xctk:CheckListBox x:Name="ListBox_TestCase" HorizontalAlignment="Left" Height="115" Margin="157,10,0,0" VerticalAlignment="Top" Width="168" ItemsSource="{Binding AvailableFrames}" SelectedMemberPath="IsChecked" DisplayMemberPath="Name" ValueMemberPath="Id"/&gt;
  • 嗯,它适用于我在List&lt;AvailableFrames&gt; 中的硬编码项目,所以我怀疑从 XML 文件填充列表时出现问题...你能设置一个断点吗ListBox_TestCase.ItemsSource = AvailableFrames; 并检查AvailableFrames 的内容?它真的包含 5 个项目,并且这 5 个项目的Name 属性是否包含字符串值?
【解决方案2】:

看起来像“现代 UI”或 mui 不支持 CheckListBox。当我从我的项目中删除 mui 接口时,我可以让它正常工作。

我们还可以为每个条目创建一个带有复选框的 ListBox,如下所示,Modern UI 支持。

<ListBox x:Name="ListBox_TestCase" ItemsSource="{Binding AvailableFrames}" Margin="172,10,283,15" >
    <ListBox.ItemTemplate>
        <HierarchicalDataTemplate>
            <CheckBox x:Name="CheckBox_TestCase" Content="{Binding Name}" IsChecked="{Binding IsChecked}"/>
        </HierarchicalDataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-12
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    相关资源
    最近更新 更多