2010-02-08 164 views
4

我在列表视图中遇到了数据绑定问题。我有两个类别: - 交易 - 基板 交易具有Substrate的属性,Transactiona保存在数据库中。在程序开始时,我想将所有事务加载为列表并在ListView中显示它们。衬底的每种可能性都应显示在组合框中,其中选择了实际的衬底。ListView中的Wpf Combobox绑定

从来就尝试过这样的 XAML

<ListView.View> 
      <GridView> 

       <GridViewColumn Header="Menge"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBox Text="{Binding Path=Amount}" /> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 

       <GridViewColumn Header="Substrate"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <ComboBox 
           ItemsSource="{Binding ElementName=InternTransaction, Path=SubstrateList}" 
           DisplayMemberPath="Description" 
           SelectedValuePath="SubstrateID" 
           SelectedItem="{Binding Path=Substrate.SubstrateID}"> 
          </ComboBox> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 

      </GridView> 
     </ListView.View> 

代码隐藏

public partial class UCInternTransaction : UserControl 
{ 
    #region Attribute 
    private BsCBTTransactionController mTransactionController; 
    private ObservableCollection<BsCBTSubstrate> mSubstrateList; 
    #endregion 

    public UCInternTransaction() 
    { 

     InitializeComponent(); 

     //Load Transactions 
     this.mTransactionController = WpfBioGas.Core.BsCAppFactory.getInstance().getCBTTransactionController(); 
     this.mTransactionController.loadTransactions(); 
     this.DataContext = this.mTransactionController.TransactionList; 

     loadData(); 
    } 

    private void loadData() 
    { 
     //Load Substrate and bind to CBSubstrate 
     this.mSubstrateList = new ObservableCollection<BsCBTSubstrate>(); 
     foreach (BsCBTSubstrate sub in WpfBioGas.Core.BsCAppFactory.getInstance().getBTFacade().BsBTSubstrate.loadAll()) 
     { 
      this.mSubstrateList.Add(sub); 
     } 
    } 

    public ObservableCollection<BsCBTSubstrate> SubstrateList 
    { 
     get { return this.mSubstrateList; } 
    } 
} 

的问题是列表的所有条目显示在列表视图,并为每一行所有的可能性底物在Combobox中。但只有Listview的第一行选择了实际的Substrate。

Screenshot

回答

2

你的组合框应该使用上的SelectedValue,而不是一个的SelectedItem绑定。

这是一个有点难以提供基于你在这个岗位所显示的片段修复,但这里是使用一对夫妇的内联XML数据源的kaxaml -ready样本:

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Page.Resources> 
    <XmlDataProvider x:Key="CharacterData"> 
     <x:XData> 
     <Data xmlns=""> 
      <Character First="Bart" Last="Simpson" Gender="M"/> 
      <Character First="Homer" Last="Simpson" Gender="M"/> 
      <Character First="Lisa" Last="Simpson" Gender="F"/> 
      <Character First="Maggie" Last="Simpson" Gender="F"/> 
      <Character First="Marge" Last="Simpson" Gender="F"/> 
     </Data> 
     </x:XData> 
    </XmlDataProvider> 
    <XmlDataProvider x:Key="GenderData"> 
     <x:XData> 
     <Data xmlns=""> 
      <Gender ID="F" Description="Female" /> 
      <Gender ID="M" Description="Male" /> 
     </Data> 
     </x:XData> 
    </XmlDataProvider> 
    </Page.Resources> 
    <ListView ItemsSource="{Binding Source={StaticResource CharacterData}, XPath=Data/Character}"> 
    <ListView.View> 
     <GridView> 
     <GridViewColumn Header="Last Name" 
      DisplayMemberBinding="{Binding [email protected]}" /> 
     <GridViewColumn Header="Gender"> 
      <GridViewColumn.CellTemplate> 
      <DataTemplate> 
       <ComboBox Width="75" SelectedValue="{Binding [email protected]}" 
        DisplayMemberPath="@Description" SelectedValuePath="@ID" 
        ItemsSource="{Binding Source={StaticResource GenderData}, XPath=Data/Gender}" /> 
      </DataTemplate> 
      </GridViewColumn.CellTemplate> 
     </GridViewColumn> 
     </GridView> 
    </ListView.View> 
    </ListView> 
</Page>