2012-10-04 44 views
2

我有一個DataGridColumn,它表示一個條目是否是主顯示值,但是該值是以「Y」或「N」的形式存儲在數據庫中的。如何爲WPF RadioButton創建一個布爾到字符串轉換器?

<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"); 
     } 
} 
+0

如何使用datagridtemplate? –

+0

@Bob:這只是你的XAML的摘錄? DataGridTemplateColumn應位於DataGrid.Columns定義內,該定義應位於DataGrid內。 – Surfbutler

+0

你能告訴我們你的班級在哪裏你有主要財產和地方你分配ItemsSource? – kmatyaszek

回答

1

@Bob所以如果是相同的,改變從初級到上殼體主綁定,並且還PRIMARY是在LUREFFORMAT的值,並且不能被直接訪問,只需指出LUREFFORMAT課堂。

<DataTemplate> 
    <RadioButton GroupName="Prime" IsChecked="{Binding LUREFFORMAT.PRIMARY, Mode=TwoWay, Converter={StaticResource BoolToPrimaryConverter}, UpdateSourceTrigger=PropertyChanged}" /> 
</DataTemplate> 
+0

哦,男孩,我覺得愚蠢。忘記區分大小寫以及PRIMARY所在的位置。 > _ < –