WPF ListView ItemTemplate вопросы - PullRequest
       8

WPF ListView ItemTemplate вопросы

3 голосов
/ 05 декабря 2009

Допустим, у меня есть следующая иерархия классов:

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

Я хотел бы привязать данные ConCondData DataContainer к ListView и создать шаблон элемента, содержащий:

Мои цели:

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

Вопросы:

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

1 Ответ

5 голосов
/ 05 декабря 2009

Для получения значений 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 соответствует связанной статье).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...