C# WPF ListView项目模板问题

C# WPF ListView项目模板问题,c#,wpf,data-binding,listviewitem,C#,Wpf,Data Binding,Listviewitem,假设我有以下类层次结构: public static class Constants { public enum MyEnum { Value1 =0, Value2, Value3 } } public class Data : INotifyPropertyChanged { public Data(string name, ushort id, Constants.MyEnum e) { D

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

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;
}
公共静态类常量
{
公共枚举髓鞘
{
值1=0,
价值2,
价值3
}
}
公共类数据:INotifyPropertyChanged
{
公共数据(字符串名称、ushort id、Constants.MyEnum e)
{
DataName=名称;
DataId=id;
DataEnum=e;
}
#区域属性
//未显示获取/设置实现
公共字符串数据名;
公共ushort数据ID;
public Constants.MyEnum DataEnum;
#端区
//未显示INotifyPropertyChanged实现
//未显示字段实现
}
公共类数据容器
{
公共数据容器()
{
ContainedData=新的ObservableCollection();
ContainedData.Add(新数据(“data1”,1,Constants.MyEnum.Value1));
ContainedData.Add(新数据(“data2”,2,Constants.MyEnum.Value2));
ContainedData.Add(新数据(“data3”,3,Constants.MyEnum.Value3));
}
包含数据的公共可见集合;
}
我想将DataContained的ContainedData数据绑定到ListView,并创建一个ItemTemplate,其中包含:

我的目标:

  • 我希望组合框能够显示所有可能的MyEnum值
  • 我希望Combobox实现到DataEnum字段的双向绑定
  • 问题:

  • 我如何实现列出的目标
  • 数据的属性具有不同的类型。这对文本框重要吗?如果是这样,我是否应该仅将它们公开为字符串?如何验证数据?(即确保用户未在数据ID字段中通过“abc”等)

  • 有关将MyEnum值获取到ItemsControl(如ComboBox)中的信息,请参阅。要在ListView中的DataTemplate中显示此内容,您将使用CellTemplate属性:

    <DataTemplate x:Key="DataEnumTemplate">
      <ComboBox ItemsSource="..." SelectedItem="{Binding DataEnum, Mode=TwoWay}" />
    </DataTemplate>
    
    <GridViewColumn CellTemplate="{StaticResource DataEnumTemplate" />
    
    
    
    (如果项目资源是根据链接文章)


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

    这正是我一直在寻找的。谢谢