代码之家  ›  专栏  ›  技术社区  ›  Maciek

WPF ListView项模板问题

  •  3
  • Maciek  · 技术社区  · 15 年前

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

    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,并创建一个包含以下内容的项模板:

    我的目标:

    1. 我希望组合框能够显示所有可能的myenum值
    2. 我希望组合框实现到DataEnum字段的Twoway绑定

    问题:

    1. 如何实现列出的目标?
    2. 数据的属性类型不同。这对文本框重要吗?如果是这样,我应该只将它们作为字符串公开吗?如何验证数据?(即确保用户不会在dataid字段等中传递“abc”)。
    1 回复  |  直到 15 年前
        1
  •  5
  •   itowlson    15 年前

    有关将myenum值获取到项控件(如组合框)中的信息,请参见 http://blogs.msdn.com/wpfsdk/archive/2007/02/22/displaying-enum-values-using-data-binding.aspx .要在ListView中的数据模板中显示此内容,您将使用CellTemplate属性:

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

    (其中itemsource是根据链接的文章提供的)。

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