【问题标题】:How do I set a code object as the DataSource for a ComboBox, using XAML?如何使用 XAML 将代码对象设置为 ComboBox 的数据源?
【发布时间】:2010-09-24 11:42:18
【问题描述】:

我这周开始了一份新工作,并正在努力解决这个 WPF 问题。

我已经到了尝试将 ComboBox 添加到 UserControl 并从代码中存在的集合中填充它的地步。

我在monkey-see-monkey-do 编码方面相处得很好。复制和调整现有代码以使下一阶段正常工作,但是这个 DataSource 的东西让我很难过。今天早上我浏览了 MSDN 上的一大堆文章,但与刚开始时相比,我的理解程度并不高。

让我来看看一些困扰我的事情,希望你们能够为我指明正确的方向:

1) [UserControlName].vb 文件均不包含任何代码。 UserControls 的所有代码都存储在 [UserControlName]Model.vb 文件中,然后使用以下排序的代码:

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="clr-namespace:MySolution"
x:Class="UserControlName"
<UserControl.Resources>
    <l:UserControlNameModel x:Key="UserControlNameModelDataSource" />
</UserControl.Resources>
<UserControl>

我不知道为什么要这样做。想法?

1.5)(使用项目符号意味着我以后不能使用 括号或代码块。到底是什么,markdown?)无论如何...

2) 我很确定我现在只想要一个静态源,因为此时 ComboBox 中的项目在执行期间不会改变。问题是,我能找到的所有关于这方面的文章都是关于创建 XML 阅读器、填充 DataGridView 和排序数据等等的巨大而复杂的事情。我只想声明我正在使用一个框架列表!我已经在代码中创建的列表。

所以,是的,我基本上需要使用与 UserControl 本身不同的类中的 Public Property ComboBoxLines As List(Of String) 作为 ComboBox 的 DataSource。

有什么想法吗?

【问题讨论】:

    标签: .net wpf vb.net xaml


    【解决方案1】:

    1) XAML 只是序列化为 XML 的对象图,顶部带有一些生奶油和樱桃。因此,当反序列化 xaml 时,将实例化 UserControlNameModel 的新实例并将其添加到密钥 UserControlblahblah 下的 UserControl 的资源集合中。它是在代码隐藏中执行此操作的替代方法,并且没有任何特殊目的......除了避免代码隐藏,我也喜欢这样做。

    至于为什么代码隐藏是空的并且所有内容都定义在 [control nmae]Model.vb 文件中,是因为编写此文件的人使用的是 M-V-VM 模式。它的用于 WPF 的 MVC(针对 WPF 绑定优点进行了 MVC 调整)。如果您不了解或不了解 MVVM,只需搜索即可。那里有大量信息。此外,代码隐藏是邪恶的。 Eeevil

    2) 很简单(抱歉,前面有 C# 代码):

    // a static class that defines combo box values for user control x lol kthx
    public static class ComboBoxLines
    {  
      public static string[] Values = new string[]{ "One", "Two", "Three" };
    }
    

    在xml中:

    <ComboBox 
      xmlns:src="clr-namespace:Where.ComboBoxLines.IsDefined"
      ItemsSource="{x:Static src:ComboBoxLines.Values}" />
    

    这是执行此操作的静态方式。当然,您也可以使用实例,或者在 [lol]Model.vb 文件中定义列表并绑定到该列表...

    【讨论】:

    • 这工作了一段时间,但我开始遇到一大堆完全随机的错误,从没有构造函数的类到没有任何公共成员,再到根本不存在,对于从网上下载的程序集的一些废话......不要以为你会响起任何铃声,是吗?
    • @Frosty 清理并重建。如果您遇到运行时错误,请获取异常和内部异常并询问有关它的问题。如果编译失败,请从构建输出中获取错误并提出问题。
    【解决方案2】:

    您的帖子中有很多疑问。但让我解决最重要的问题。要绑定到代码对象,请使用 ObjectDataSource。按照与本文类似的步骤操作:

    http://dotnetslackers.com/articles/wpf/Data-binding-to-CLR-objects-in-WPF.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      相关资源
      最近更新 更多