来自其他Collection的XAML绑定值

时间:2012-03-03 20:12:11

标签: silverlight xaml data-binding

我真的在网上搜索,找不到答案。

我很难描述我尝试做的事情。也许这就是我的原因 无法在Stackoverflow和Google上找到答案。

我的页面中有ListBox,绑定到ObservableCollection<Model>。 此Model具有另一个模型Id的属性。还有 a Dictionary<int,SecondModel>包含已实现的第二个模型。

我可以将第二个模型的属性添加到第一个模型,因为这是第三方库。

是否可以使用该集合从已确认的Name获取SecondModel属性?

Text="{Binding ???}"

示例

public class Model
{
    public int Id { get; set; }
    public int SecondModelId { get; set; }
}

public class SecondModel
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class SomeOtherModel
{
    public Dictionary<int,SecondModel> SecondModelCollection{ get; set; }
}

2 个答案:

答案 0 :(得分:1)

如果你不能使用Model类的胆量,我建议将这两个模型包装成类似的东西:

public class JoinedModel
{
  public Model FirstModel{ get; set; }
  public Model SecondModel{ get; set; }
}

 var secondModelCollection = SomeOtherModel.SecondModelCollection.Values;

 var joinedCollection = from model in firstModelCollection
                              join secondModel in secondModelCollection 
                              on model.SecondModelId equals secondModel.Id
                              select new JoinedModel() { FirstModel = model, SecondModel = secondModel };

您可以将joinedCollection设置为数据源,而不是将 firstModelCollection 设置为问题中的ObservableCollection<Model>

然后在绑定中,您可以执行两级绑定,例如Text="{Binding SecondModel.Name}"

...那么,我假设您可以更改视图的数据源,我希望您可以:)

答案 1 :(得分:1)

我喜欢zortkun的解决方案。您也可以使用IValueConverter

<UserControl.Resources>
  <my:SecondValueConverter x:Name="SecondValueLookup" />
</UserControl.Resources>
  :
  :
<TextBlock Text="{Binding SecondValueId, 
                  Converter={StaticResource SecondValueLookup}, 
                  ConverterParameter=Name}" />