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. コンボボックスに、可能なすべての MyEnum 値を表示できるようにしたい
  2. Combobox に DataEnum フィールドへの TwoWay バインディングを実装させたい

質問:

  1. 記載されている目標を達成するにはどうすればよいですか?
  2. データのプロパティにはさまざまな種類があります。それはTextBoxにとって重要ですか?もしそうなら、それらを文字列としてのみ公開する必要がありますか? データを検証するにはどうすればよいですか? (つまり、ユーザーが DataId フィールドなどで「abc」を渡さないようにします。)
4

1 に答える 1

5

MyEnum値をComboBoxなどのItemsControlに取得するには、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 に答える