我真的在网上搜索,找不到答案。
我很难描述我尝试做的事情。也许这就是我的原因 无法在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; }
}
答案 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}" />