包含组合框的ItemTemplate - 如何绑定到SelectedValue?

时间:2016-03-19 17:50:41

标签: c# wpf mvvm

想象一下,您正在为婚礼策划师应用创建UI。您将拥有一个客人列表,并且您希望在屏幕上显示其名称,其组合框包含“将参加”/“可能”/“否”的值。

我尝试过那样的东西....我在视图模型中有一组项目(来宾)。对于每个项目,我想显示一个Label和一个ComboBox。每个ComboBox在下拉列表中具有相同的值(可能的响应)。

我创建了一个包含标签和组合框的ItemTemplate。我将它绑定到我的客人集合,它按预期工作。我正在使用祖先绑定,以便ComboBox的ItemsSource绑定到可能的响应列表。这很有效。

我正在努力的是如何绑定SelectedItem以获取用户选择的值?我想在某种程度上在ViewModel上有一组选定的值,但是我在找到正确的单词来描述它/搜索它时遇到了很多麻烦。

任何人都可以帮助我吗?我是以错误的方式解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您可以为出勤状态创建一个枚举,并为您的Guest类添加Attendance属性:

public enum Attendance
{
    Yes,
    No,
    Maybe
}

public class Guest
{
    ...
    public Attendance Attendance { get; set; } // raise PropertyChanged event if necessary
}

现在,您可以将ComboBox项的Tag属性设置为适当的枚举值,并绑定SelectedValue属性:

<ItemsControl.ItemTemplate>
    <DataTemplate>
        <ComboBox SelectedValue="{Binding Attendance}" SelectedValuePath="Tag">
            <TextBlock Tag="Yes">Will Attend</TextBlock>
            <TextBlock Tag="No">Won't Attend</TextBlock>
            <TextBlock Tag="Maybe">May Attend</TextBlock>
        </ComboBox>
    </DataTemplate>
</ItemsControl.ItemTemplate>