2012-10-18 107 views
1

我对此很陌生,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代码片段:

<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"/> 

我可能失去了一些东西很简单。什么是正确的方法?我还想将选定的值(不是多选)绑定到我的代码中的另一个属性。谁能帮忙?不知道为什么我很困惑。

回答

2

如果您正在设置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" /> 
+0

这两种方法都有效。谢谢! – dmaruca

+0

这就是我的意思。无论如何您都必须设置ItemsSource。如果您设置了DataContext,则必须将ItemsSource设置为{Binding},以便进行数据绑定。否则,您必须将源分配给ItemsSource –

1

您错过了ItemsSource的绑定。

事情是这样的:

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

哪里myCollection是暴露你的列表中的属性。

+0

你是不是想告诉我,我不能直接从数据表填充列表?我必须创建一个集合?如果是这样的话,为什么我应该指定SelectedValuePath =“ID”DisplayMemberPath =“Value”? – dmaruca

+0

@dmaruca:不可以。您应该能够直接绑定到DataTable,DataTable是一种集合。你只需要一个属性来绑定。从你发布什么'BusinessData'应该是什么都不清楚。如果它实际上是表,那么你应该只能使用'ItemsSource = {Binding}',因为它已经是数据上下文了。 –

+0

对不起BusinessData的混淆。我粘贴了错误的东西,然后在回去之前回复并编辑它以显示正确的名称。 – dmaruca