【问题标题】:Binding Observable collection list to dynamically created ComboBox in Silverlight在 Silverlight 中将 Observable 集合列表绑定到动态创建的 ComboBox
【发布时间】:2018-10-17 09:43:17
【问题描述】:

我有一个需求,我需要将可观察集合列表绑定到动态创建的 ComboBox 的项目源。

问题是我们通常在 ItemsSource 属性中通过 xaml 进行绑定,但现在网格中的控制行是动态添加的,因此行中的每个 ComboBox 都引用同一个集合,而我需要将它绑定到可观察集合中的单独集合每次在网格中添加一行时列出。

这是我迄今为止所尝试的,任何指导将不胜感激。谢谢。

public virtual List<ObservableCollection<ComboBoxEntity>> ListRewardRule { get; set; }

Xaml:

<itimControls:ComboBox Name="cboReward"
                       IsMandatory="True"                           
                       itimComponents:ComponentManager.ComponentId="TXT_GROUP_RULE"
                       MaxWidth="400"
                       MinWidth="150"
                       ItemsSource="{Binding ListRewardRule, ElementName=RDefinitionScreen}"
                       DisplayMemberPath="Name"
                       SelectedValuePath="Code"
                       Loaded="cboReward_Loaded"
                       SelectedValue="{Binding RewardRuleId, Mode=TwoWay}"
                       SelectionChanged="cboReward_SelectionChanged">
</itimControls:ComboBox>

.CS:

private void cboReward_Loaded(object sender, RoutedEventArgs e)
{
    Itim.Framework.Silverlight.UI.Controls.ComboBox cboReward = ((Itim.Framework.Silverlight.UI.Controls.ComboBox)sender);
    int row = (int)cboReward.GetValue(Grid.RowProperty);
    if (Model.ListRewardRule.Count > 0)
    {
        var rewardGroups = Model.RewardGroupAndTier.RewardGroups;
        if(rewardGroups.Count > 1)
        {
            cboReward.ItemsSource = Model.ListRewardRule[row];               
        }
    }
}

【问题讨论】:

    标签: wpf data-binding grid silverlight-4.0


    【解决方案1】:

    我的理解是,你有一个“网格”(我想你的意思是一个 DataGrid),并且网格中的每一行都有一组组合框。

    我要做的是将该网格绑定到自定义类的 ObservableCollection,称为 CustomRowClass。 CustomRowClass 应该有一个绑定到组合框的 ObservableCollection。

    魔术是为 CustomRowClass 定义一个 DataTemplate。以这种方式设置 XAML 后,您只需创建一个 CustomRowClass 实例,然后将其添加到网格的 ItemsSource。

    【讨论】:

    • 不是DataGrid,我用的是System.Windows.Controls.Grid;
    • 您可能需要重新考虑这种方法。网格是一个面板。面板主要用于定位其他控件。在您的情况下,我会使用项目控件,例如 DataGrid 或 ListView,甚至是准系统 ItemsControl。当然,您可以将 Grid 用作项目控件,但您需要做更多的工作。
    猜你喜欢
    • 2016-06-17
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 2012-12-31
    • 1970-01-01
    相关资源
    最近更新 更多