2009-12-04 5 views
3

Допустим, что я получил следующую иерархию классов:WPF ListView ItemTemplate расспрашивает

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; 
} 

я хотел бы привязка ContainedData DataContainer к в ListView и создать ItemTemplate, содержащий:

Мои цели:

  1. Я хочу выпадающий, чтобы быть в состоянии отобразить все возможные MyEnum значения
  2. Я хочу выпадающий чтобы реализовать TwoWay связывание с полем DataEnum

Вопросы:

  1. Как достичь перечисленные цели?
  2. Данные имеют разные типы. Это имеет значение для TextBox? Если да, то следует ли выставлять их только как строки? Как проверить данные? (Т.е. убедиться, что пользователь не проходит «ABC» в поле и т.д. DataId)

ответ

5

Для получения значений MyEnum в ItemsControl, таких как ComboBox см http://blogs.msdn.com/wpfsdk/archive/2007/02/22/displaying-enum-values-using-data-binding.aspx. Чтобы отобразить это в DataTemplate в ListView вы будете использовать свойство CellTemplate:

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

<GridViewColumn CellTemplate="{StaticResource DataEnumTemplate" /> 

(где ItemsSource находится в связанном статье).

Re типы данных, привязка TextBox.Text будет автоматически конвертировать между текстовой строкой и ushort или что-то еще, и будет автоматически сигнализировать об ошибке проверки, если строка не является конвертируемой (например, «abc»).

+0

Это именно то, что я искал. Благодаря! – Maciek

Смежные вопросы