WPF枚举绑定到ComboBox

时间:2014-08-22 22:24:23

标签: c# wpf xaml combobox enums

我的枚举不对我的联系人管理器具有约束力。

我有一个枚举类

    [Serializable]
    public enum Group
    {
        Friend,
        Family,
        Coworker
    }
}

然后我有我的MainWindow初始化我的联系人管理器

public partial class MainWindow : Window
    {
        //public List<Contact> ContactList = new List<Contact>();
        public ObservableCollection<Contact> ContactList = new ObservableCollection<Contact>();



        string fileName = null;


        Contact furqan = new Contact("Herp Derp");
        Contact rizwan = new Contact("Merp Meep");

        public MainWindow()
        {
            InitializeComponent();
            myItemsControl.ItemsSource = ContactList;
            //myComboBox.ItemsSource = Enum.GetValues(typeof(Group));
            //myComboBox.ItemsSource = Enum.GetValues(typeof(Group)).Cast<Group>();


            furqan.HomePhone = "801238421";
            ContactList.Add(furqan);
            ContactList.Add(rizwan);


            this.DataContext = this;
        }

我的XAML看起来像这样

    <Label Grid.Row="7" Content="Home Email:"/>
    <TextBox Grid.Row="7" Text="{Binding ElementName=myItemsControl, Path=SelectedItem.PersonalEmail, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

    <Label Grid.Row="8" Content="Work Email:"/>
    <TextBox Grid.Row="8" Text="{Binding ElementName=myItemsControl, Path=SelectedItem.WorkEmail, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>


    <Label Grid.Row="10" Content="Group:"/>
    <ComboBox Grid.Row="10" Grid.Column="1" Text="{Binding ElementName=myItemsControl, Path=SelectedItem.ContactGroup, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

ComboBox应该显示&#34; CoWorker,Family,Friend&#34;在它内部,但它没有,它应该与我的Contact Class绑定。

http://pastebin.com/BtY7SSjR

<ListBox x:Name="myItemsControl" Grid.Column="0" Grid.Row="1" Background="LightBlue">
            <ItemsControl.ItemTemplate>
                <DataTemplate x:Name="myDataTemplate">
                    <StackPanel>
                        <TextBlock Height="50" x:Name="contactName">
                            <Run FontSize="14" Text="{Binding Path=FirstName}"/>
                            <Run FontSize="14" Text="{Binding Path=LastName}"/>
                        </TextBlock>
                    </StackPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ListBox>

如何正确绑定它以便它与我的联系人一起使用?

修改 一切都有效,除了我的枚举

http://puu.sh/b3JDK.jpg

所有文本框都显示了它们应该是什么。只有ComboBox不起作用,因为它没有绑定到Enum可以的所有值。我需要创建一个IEnumerable,可能是一个ObservableCollection,并将该组的所有值添加到它,然后绑定到它。这是有效的,但是我不知道如何绑定我的contactList(包含所有联系人的observablecollection)来保存Group集合。有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我通过执行以下操作修复了它:

<ComboBox ItemsSource="{Binding ElementName=myItemsControl, Path=SelectedItem.ContactGroupValues, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
                      SelectedItem="{Binding ElementName=myItemsControl, Path=SelectedItem.ContactGroup, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Row="10" Grid.Column="1"/>

然后在Contact类中:

private Group _Group;

        public Group ContactGroup
        {
            get
            {
                return _Group;
            }
            set
            {
                _Group = value;
            }
        }

        public IEnumerable<Group> ContactGroupValues
        {
            get
            {
                return Enum.GetValues(typeof(Group)).Cast<Group>();
            }
        }