3

エントリがプライマリ表示値であるかどうかを表すDataGridColumnがありますが、値は「Y」または「N」としてデータベースに保存されます。

 <Window.Resources>
      <local:BoolToPrimaryConverter x:Key="BoolToPrimaryConverter" />
 </Window.Resources>
 <DataGrid Name="NamingDatagrid" AutoGenerateColumns="False" ItemsSource="{Binding EntityReferences, Mode=TwoWay}"
              CanUserAddRows="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Convention" Binding="{Binding ReferenceType}"/>
            <DataGridTextColumn Header="Value" Binding="{Binding ReferenceValue}" />
            <DataGridTemplateColumn Header="Primary" >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <RadioButton GroupName="Prime" IsChecked="{Binding Primary, Mode=TwoWay, Converter={StaticResource BoolToPrimaryConverter}, UpdateSourceTrigger=PropertyChanged}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

ブール値から文字列へのコンバータ

 class BoolToPrimaryConverter : IValueConverter {
      public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
           return ((value as string).Equals("Y")) ? true : false;
      }

      public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
           return (bool)value ? "Y" : "N";
      }
 }

コンバーターが設定されていても、呼び出されることはありません(デバッガーでチェックされます)。これを機能させるために必要な何かが欠けていますか?

編集:プライマリが由来するクラスを追加しました。

 [Serializable]
 [EdmEntityType(NamespaceName = "cContainer", Name = "LUREFFORMAT")]
 [DataContract(IsReference = true)]
 public class LUREFFORMAT : EntityObject {
      public LUREFFORMAT();

      [DataMember]
      [EdmScalarProperty(EntityKeyProperty = false, IsNullable = false)]
      public short DISPLAYORDER { get; set; }
      [DataMember]
      [EdmScalarProperty(EntityKeyProperty = false, IsNullable = false)]
      public short ENABLED { get; set; }
      [DataMember]
      [EdmScalarProperty(EntityKeyProperty = true, IsNullable = false)]
      public long ID { get; set; }
      [EdmScalarProperty(EntityKeyProperty = false, IsNullable = false)]
      [DataMember]
      public string ISUNIQUE { get; set; }
      [DataMember]
      [XmlIgnore]
      [EdmRelationshipNavigationProperty("cContainer", "FK_REFS_REFFORMATID", "REFS")]
      [SoapIgnore]
      public EntityCollection<PLATFORMREFS> REFS { get; set; }
      [EdmScalarProperty(EntityKeyProperty = false, IsNullable = false)]
      [DataMember]
      public string PRIMARY { get; set; }
      [DataMember]
      [EdmScalarProperty(EntityKeyProperty = false, IsNullable = false)]
      public string REFFORMAT { get; set; }

      public static LUREFFORMAT CreateLUREFFORMAT(long id, string rEFFORMAT, string pRIMARY, string iSUNIQUE, short dISPLAYORDER, short eNABLED);
 }

編集2:EntityRefsプロパティを追加

 public EntityCollection<PLATFORMREFS> EntityRefs {
      get {
           return entityRefs;
      }
      set {
           entityRefs = value;
           OnPropertyChanged("EntityRefs");
      }
 }
4

1 に答える 1

1

@Bobなので、同じ場合は、バインディングをプライマリから大文字のPRIMARYに変更します。また、PRIMARYはLUREFFORMATの値であり、直接アクセスすることはできません。LUREFFORMATクラスからポイントするだけです。

 <DataTemplate>
   <RadioButton GroupName="Prime" IsChecked="{Binding LUREFFORMAT.PRIMARY, Mode=TwoWay, Converter={StaticResource BoolToPrimaryConverter}, UpdateSourceTrigger=PropertyChanged}" />
 </DataTemplate>
于 2012-10-04T16:09:51.123 に答える