gpt4 book ai didi

ListView 中的 Wpf 组合框绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 13:25:06 24 4
gpt4 key购买 nike

我遇到了 ListView 中组合框的数据绑定(bind)问题。
我有两个类:

  • 交易
  • 基质

  • Transaction 具有 Substrate 的属性,并且 Transactiona 保存在 Datebase 中。在程序开始时,我想将所有事务加载为列表并将它们显示在 ListView 中。 Substrate 的每种可能性都应显示在 Combobox 中,其中选择了实际的 Substrate。

    我试过这样
    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; }
    }
    }

    问题是列表的所有条目都显示在 ListView 中,并且对于每一行 Substrate 的所有可能性都在 Combobox 中。但只有在 Listview 的第一行才选择实际的 Substrate。

    最佳答案

    您的 ComboBox 应该使用 SelectedValue 而不是 SelectedItem 的绑定(bind)。

    仅根据您在帖子中显示的片段提供修复有点困难,但这里是 kaxaml - 使用几个内联 XML 数据源的现成示例:

    <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 XPath=@First}" />
    <GridViewColumn Header="Gender">
    <GridViewColumn.CellTemplate>
    <DataTemplate>
    <ComboBox Width="75" SelectedValue="{Binding XPath=@Gender}"
    DisplayMemberPath="@Description" SelectedValuePath="@ID"
    ItemsSource="{Binding Source={StaticResource GenderData}, XPath=Data/Gender}" />
    </DataTemplate>
    </GridViewColumn.CellTemplate>
    </GridViewColumn>
    </GridView>
    </ListView.View>
    </ListView>
    </Page>

    关于ListView 中的 Wpf 组合框绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2221745/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com