【问题标题】:How to bind a class to WPF AutoCompleteBox?如何将类绑定到 WPF AutoCompleteBox?
【发布时间】:2013-03-06 03:06:02
【问题描述】:

我有这样的课程:

class MyClass
{
    public int ID{ get; set; }
    public string Title{ get; set; }
}

目前我将它绑定到 AutoCompleteBox,如下所示:

List<MyClass> lstMyClass = new List<MyClass>();
lstMyClass = context.Sometable;
autoCompleteBox1.ItemsSource = lstMyClass;
autoCompleteBox1.ValueMemberPath = "Title";
autoCompleteBox1.PopulateComplete();

它通过标题查找对象,但在自动完成部分它显示类定义而不是项目标题。有什么想法吗?

【问题讨论】:

  • 您正在创建一个新列表,然后用context.Sometable 覆盖它来丢弃它。您可以直接将ItemsSource 的值分配给context.Sometable
  • @DrewNoakes 这段代码只是一个示例,我正在按照您所说的进行操作,无论如何问题是我提到的 autocomplete 部分,而不是列表内容。
  • 检查 API 以获取其他 *MemberPath 属性。我自己不熟悉。
  • @DrewNoakes 已经做到了,没有什么比得上DisplayMemberPath了。

标签: c# wpf autocomplete


【解决方案1】:

您可以覆盖 MyClass 中的 ToString() 方法,使其返回 Title。

【讨论】:

  • 该类来自实体框架,但这是一个好点。
  • 好吧,如果你不能改变类,你可以把它包装在另一个类中,并在那里覆盖 ToString()。不过,不确定这是不是最好的解决方案。
【解决方案2】:

您可以使用ItemTemplate (msdn)。

<controls:AutoCompleteBox x:Name="autoCompleteBox1"        
      FilterMode="Contains"              
      IsTextCompletionEnabled="True">
    <controls:AutoCompleteBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Title}" />
        </DataTemplate>
    </controls:AutoCompleteBox.ItemTemplate>
</controls:AutoCompleteBox>

【讨论】:

  • 太好了,tnx,我可以添加ItemTemplate programmaticlay 吗?不想要任何 xaml 代码。如果可能的话,那就太棒了。
  • @MehdiGhanavatian 您应该在 XAML 中定义您的 GUI,而不是在代码隐藏中。但是,如果您想这样做,请查看以下问题:stackoverflow.com/questions/5471405/…
  • 我在 xaml 中定义 GUI,我希望能够自定义所有内容。这就是为什么我想在代码隐藏中添加细节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
相关资源
最近更新 更多