【问题标题】:Binding Listbox to a DataTable using Binding使用 Binding 将 Listbox 绑定到 DataTable
【发布时间】:2012-10-09 03:15:18
【问题描述】:

我是新手,这次 Google 没有帮助我。我能够遵循一些示例并填充 DataGrid 并修改数据库,但 ListView 给了我一个问题。这是我的课:

public class GlobalDataviews : INotifyPropertyChanged   
{
    ...

    //Billable data table
    //Populated elsewhere with "SELECT ID, Value FROM BillableTable;"
    private DataTable mBillable;
    public DataView Billable()
    {
        return mBillable.DefaultView; 
    }  
}

这是我的 XAML sn-ps:

<Window.Resources>
    <ObjectDataProvider x:Key="GlobalDataviews" ObjectType="{x:Type local:GlobalDataviews}" />
    <ObjectDataProvider x:Key="BillableData" ObjectInstance="{StaticResource GlobalDataviews}" MethodName="Billable" />
</Window.Resources>

现在是我的 ListView:

<ListBox Name="listBox1" DataContext="{StaticResource BillableData}" SelectedValuePath="ID" DisplayMemberPath="Value"/>

我可能遗漏了一些非常简单的东西。什么是正确的方法?我还想将所选值(无多选)绑定到我的代码中的另一个属性。任何人都可以帮忙吗?不知道为什么我会这么困惑。

【问题讨论】:

    标签: c# wpf data-binding datatable


    【解决方案1】:

    如果要设置 DataContext,则必须设置 ItemsSource 属性才能绑定数据。

    <ListBox x:Name="listBox1" DataContext="{StaticResource BusinessData}" ItemsSource="{Binding}" SelectedValuePath="ID" DisplayMemberPath="Value" />
    

    否则可以直接绑定ItemsSource,如下:

    <ListBox x:Name="listBox1" ItemsSource="{Binding Source={StaticResource BusinessData}}" SelectedValuePath="ID" DisplayMemberPath="Value" />
    

    【讨论】:

    • 这就是我的意思。在任何情况下,您都必须设置 ItemsSource。如果您设置了 DataContext,则必须将 ItemsSource 设置为 {Binding} 以便发生数据绑定。否则,您必须将源分配给 ItemsSource
    【解决方案2】:

    您缺少 ItemsSource 的绑定。

    类似这样的:

    <ListBox Name="listBox1" DataContext="{StaticResource BusinessData}" ItemsSource="{Binding myCollection}" SelectedValuePath="ID" DisplayMemberPath="Value"/>
    

    myCollection 是一个公开列表的属性。

    【讨论】:

    • 你是想告诉我我不能直接从 DataTable 填充列表吗?我必须创建一个集合?如果是这样,我为什么要指定 SelectedValuePath="ID" DisplayMemberPath="Value"?
    • @dmaruca:不。您应该能够直接绑定到 DataTable,DataTable 是一种集合。你只需要一个属性来绑定。从您发布的内容中不清楚BusinessData 应该是什么。如果它实际上是表,那么您应该可以只使用ItemsSource={Binding},因为它已经是数据上下文。
    • 对于 BusinessData 的困惑,我们深表歉意。我粘贴了错误的东西,你在我回去之前回复并编辑它以显示正确的名称。
    猜你喜欢
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多