使用MVVM模式从视图模型到WPF中的视图的条件绑定

时间:2015-05-11 07:07:27

标签: c# wpf xaml mvvm combobox

我正在使用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;
        }
    }

2 个答案:

答案 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>