【问题标题】:How to dynamically load items in a ComboBox using AvaloniaUI如何使用 AvaloniaUI 在 ComboBox 中动态加载项目
【发布时间】:2020-12-16 15:27:38
【问题描述】:

我在 AvaloniaUI 中有一个 ComboBox,我想根据另一个类的数组提供的名称动态加载列表。比如下面的代码:

<ComboBox Name="Select" SelectedIndex="0"></ComboBox>
public class MainWindow : Window
{
    private Note[] notes;
    public MainWindow()
    {
        InitializeComponent();
    }

    private void InitializeComponent()
    {
        AvaloniaXamlLoader.Load(this);
        notes = Utility.GetNotes();

        ComboBox comboBox = this.Find<ComboBox>("Select");
        foreach (Note n in notes)
        {
            comboBox.Items.Add(
                new ComboBoxItem()
                {
                    Content = n.Name
                }
            );
        }
    }
}
public class Note
{
    public string Name;
    public string NoteText;
}

我不确定在 AvaloniaUI 中执行此操作的正确方法,因为在 WPF 中您可以直接调用 comboBox.Items.Add() 函数。但是,在使用 AvaloniaUI 时,该功能似乎不存在。

【问题讨论】:

  • 您是否尝试过将comboBox.Items 直接设置为您的数组并在XAML 中为Note 类定义数据模板?
  • @kekekeks 我不确定我是否理解你的意思。能给个代码示例吗?
  • comboBox.Items = new List { new Note {Name="name", NoteText="text"}, new Note {Name="name 2", NoteText="text"} };

标签: c# .net-core avaloniaui


【解决方案1】:

根据上面的@kekekeks 评论,我可以通过一些更改来完成这项工作:

<ComboBox Name="Select">
    <ComboBox.ItemTemplate>
      <DataTemplate>
        <TextBlock Text="{Binding Name}" />
      </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>
public class MainWindow : Window
{
    private List<Note> Notes;
    public MainWindow()
    {
        InitializeComponent();
    }

    private void InitializeComponent()
    {
        AvaloniaXamlLoader.Load(this);
        Notes = Utility.GetNotes();
        ComboBox comboBox = this.Find<ComboBox>("Select");
        comboBox.Items = Notes;
        comboBox.SelectedIndex = 0;
    }
}
public class Note
{
    public string Name { get; set; }
    public string NoteText { get; set; }
}

我只是想补充一点,将 Notes 变量作为数组似乎不起作用,因此我不得不将其更改为列表,并且我必须将 Note 类也更改为使用 { get; set; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    相关资源
    最近更新 更多