将可观察的集合列表绑定到Silverlight中动态创建的ComboBox

时间:2018-10-17 09:43:18

标签: wpf data-binding grid silverlight-4.0

我有一个需要将可观察到的集合列表绑定到动态创建的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];               
        }
    }
}

1 个答案:

答案 0 :(得分:0)

据我所知,您有一个“网格”(我想您指的是一个DataGrid),并且网格中的每一行除其他外还具有一组组合框。

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

魔术是为CustomRowClass定义一个DataTemplate。通过这种方式设置XAML之后,您所需要做的就是创建一个CustomRowClass实例,然后将其添加到网格的ItemsSource中。