不确定我的头衔是否能解释我的问题。
在我的应用程序中,我拨打了一个服务电话 - 检查客户列表。 - 检查组织清单。
然后我将这个客户列表绑定到我的视图上的列表框中。
在我的viewmodel中,我有以下属性:
IEnumerable<Organisation> Organisations
ObservableCollection<Customer> Customers
组织属性:OrganisationId,OrganisationName
客户属性:CustomerId,OrganisationId,CustomerFirstName,CustomerLastName
在我的视图中的列表框内,我想显示列表中每个客户的组织名称。
我怎么能在我看来绑定这个?我只想要一个文本块来显示客户的组织名称。
答案 0 :(得分:4)
我在客户ViewModel中展平了模型:
class CustomerViewModel : INotifyPropertyChanged
{
public string OrgName { get; }
public string FirstName {get; }
public string LastName { get; }
}
然后拥有的ViewModel返回Customers集合:
public class StoreViewModel : INotifyPropertyChanged
{
public ObservableCollection<CustomerViewModel> Customers { get; }
}
将ListBox绑定到CustomerViewModel上的OrgName属性:
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding FirstName}"/>
<TextBlock Text="{Binding OrgName}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 1 :(得分:0)
我会为此使用MultiBinding
和MultiValueConverter
,如果您被限制为Silverlight,这很可能是不可能的,因为标签建议尽管......
答案 2 :(得分:0)
我同意Ritch你应该压扁模型,但如果你真的不想这样做,你可以使用IValueConverter。在您希望显示名称的绑定中,如果将Organizations设置为另一个控件的datacontext,则可以执行元素到元素绑定并在绑定中传递其他控件的datacontext,并在ConverterParameter中传递在OrganizationId中,然后在Converter代码中使用一点LINQ并返回你想要的名称
答案 3 :(得分:0)
将列表框绑定到从ViewModel公开的Linq查询。
Public IEnumerable ItemsView
{
get {
return
{
from customer in this.Customers
from org in this.Organisations
where customer.OrganisationId=org.OrganisationId
select new { FirstName=customer.FirstName, LastName=customer.LastName, OrganisationName=org.OrganisationName}
};
}
然后在Ritch的答案中绑定列表框。
PS。我在手机上写这个,所以代码可能不完美。