3

假设我有以下类层次结构:

public static class Constants
{
    public enum MyEnum
    {
       Value1 =0,
       Value2,
       Value3
    }
}

public class Data : INotifyPropertyChanged
{
    public Data(string name, ushort id, Constants.MyEnum e)
    {
        DataName = name;
        DataId = id;
        DataEnum = e;
    }

    #region Properties
    // get / set implementation not shown
    public string DataName;
    public ushort DataId;
    public Constants.MyEnum DataEnum;
    #endregion

    // INotifyPropertyChanged implementation not shown
    // Fields implementation not shown
}

public class DataContainer
{
    public DataContainer()
    {
        ContainedData = new ObservableCollection<Data>();
        ContainedData.Add(new Data("data1", 1, Constants.MyEnum.Value1));
        ContainedData.Add(new Data("data2", 2, Constants.MyEnum.Value2));
        ContainedData.Add(new Data("data3", 3, Constants.MyEnum.Value3));
    }

    public ObservableCollection<Data> ContainedData;
}

我想将 DataContainer 的 ContainedData 数据绑定到 ListView 并创建一个 ItemTemplate 包含:

我的目标 :

  1. 我希望 Combobox 能够显示所有可能的 MyEnum 值
  2. 我希望 Combobox 实现到 DataEnum 字段的 TwoWay 绑定

问题 :

  1. 我如何实现列出的目标?
  2. 数据的属性有多种类型。这对文本框有影响吗?如果是这样,我应该只将它们公开为字符串吗?如何验证数据?(即确保用户没有在 DataId 字段等中传递“abc”)
4

1 回答 1

5

要将 MyEnum 值获取到 ItemsControl(例如 ComboBox)中,请参阅http://blogs.msdn.com/wpfsdk/archive/2007/02/22/displaying-enum-values-using-data-binding.aspx。要在 ListView 中的 DataTemplate 中显示它,您将使用 CellTemplate 属性:

<DataTemplate x:Key="DataEnumTemplate">
  <ComboBox ItemsSource="..." SelectedItem="{Binding DataEnum, Mode=TwoWay}" />
</DataTemplate>

<GridViewColumn CellTemplate="{StaticResource DataEnumTemplate" />

(其中 ItemsSource 是每个链接的文章)。

对于数据类型,TextBox.Text 绑定将自动在文本字符串和 ushort 或其他任何内容之间进行转换,如果字符串不可转换(例如“abc”),则会自动发出验证错误信号。

于 2009-12-04T21:27:04.523 回答