我正在使用MVVM模式开发WPF应用程序。我在视图中有一个组合,在viewmodel(项目和组织)中有两个列表。根据组织列表项,我必须绑定组织的名称。 例如,如果组织列表的Count属性为1,则组合框项目必须为" ProjectName" ,如果组织列表的Count属性大于1,则组合框项目应该看起来像" ProjectName - OrganizationName" 。 这是我的XAML代码:
$(input).removeAttr("required");
我应该如何实现这个目的。我希望得到一些帮助。欢呼声。
我在viewmodel中添加了属性projectFullName但是我得到了一个空的组合框:
<ComboBox x:Name="textBox3" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" ItemsSource="{Binding Path=Projects}" DisplayMemberPath="Name" IsSynchronizedWithCurrentItem="True" SelectedItem="{Binding Path=SelectedProject}">
</ComboBox>
XAML代码:
public string ProjectFullName
{
get
{
if (this.organizations.ToList().Count > 1)
{
this.projectFullName = string.Format("{}{0} - {1}", this.selectedProject.Name, this.organizations.First(org => org.Id == this.selectedProject.OrganizationId).Name);
}
else if (this.organizations.ToList().Count == 1)
{
this.projectFullName = this.selectedProject.Name;
}
return this.projectFullName;
}
}
答案 0 :(得分:0)
你有几种选择来实现这一点,但在我看来最好的是:
向数据上下文添加属性,将称为“FullName”或其他内容。 那将返回:(伪) 如果项目计数&gt; 0然后 返回名称+' - '+ ProjectName 否则返回姓名
然后将DisplayMemberPath绑定到FullName。
答案 1 :(得分:0)
Datatrigger确实是你的朋友。确保ComboBox未设置DisplayMemberPath,因为这将覆盖样式设置器。
<Style x:Key="MyStyle" TargetType="ComboBox">
<Setter Property="DisplayMemberPath" Value="DefaultName"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Items.Count}" Value="1">
<Setter Property="DisplayMemberPath" Value="OtherName"/>
</DataTrigger>
</Style.Triggers>
</Style>