SQL Serverの場合のように、BindingプロパティがNull値を与える場合に備えて、DataGridTextColumnにデフォルト値を設定しようとしています...
そこで、私はプロパティTargetNullValueを調査して見つけました。ここで、列にnullがある場合にデフォルト値を設定できます。
しかし、私がやっているように機能していません。次のエラーをスローします
System.Windows.Markup.XamlParseException: 'A' Binding 'は、タイプ' Binding 'の' TargetNullValue 'プロパティに設定できません。「バインディング」は、DependencyObjectのDependencyPropertyにのみ設定できます。
これが私のXAMLコードの例です。
<DataGrid x:Name="proveedorDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding IsAsync=True}" Margin="15,50,25,70" RowDetailsVisibilityMode="VisibleWhenSelected"
SelectionMode="Single" IsReadOnly="True" CanUserAddRows="False" CanUserResizeRows="False" CanUserDeleteRows="False" PreviewKeyDown="ProveedorDataGrid_OnPreviewKeyDown">
<DataGrid.Columns>
<DataGridTextColumn x:Name="municipioColumn" Binding="{Binding Municipio, TargetNullValue={Binding CCodigoPostal.Municipio}}" Header="Municipio" Width="Auto" />
</DataGrid.Columns>
</DataGrid>
現在のリソースで
<Window.Resources>
<CollectionViewSource x:Key="proveedorViewSource" d:DesignSource="{d:DesignInstance {x:Type Core:Proveedor}, CreateList=True}"/>
</Window.Resources>
実際には、DataSourceを使用してEntityFrameworkにバインドされています。
よろしくお願いします!
*クラスを更新
public class Proveedor
{
public Proveedor()
{
ValeVehiculoCombustibles = new HashSet<ValeVehiculoCombustible>();
FacturaProveedors = new HashSet<FacturaProveedor>();
EntradaBasculas = new HashSet<EntradaBascula>();
}
public Guid? Id_Proveedor { get; set; }
public string Codigo { get; set; }
public string RazonSocial { get; set; }
public string Calle { get; set; }
public string Colonia { get; set; }
public virtual C_CodigoPostal CCodigoPostal { get; set; }
public int CCodigoPostalId { get; set; }
public string Telefonos { get; set; }
public string RFC { get; set; }
public virtual CuentaContable CuentaContable { get; set; }
public Guid? CuentaContableId { get; set; }
public short DiasCred { get; set; }
public decimal SaldoMN { get; set; }
public decimal AnticipoMN { get; set; }
public decimal SaldoDlls { get; set; }
public decimal AnticipoDlls { get; set; }
public string Contacto { get; set; }
public string Email { get; set; }
public string Municipio { get; set; }
public string Estado { get; set; }
public string Ciudad { get; set; }
public bool Estatus { get; set; }
public DateTime Actualizado { get; set; }
public virtual ICollection<ValeVehiculoCombustible> ValeVehiculoCombustibles { get; set; }
public virtual ICollection<FacturaProveedor> FacturaProveedors { get; set; }
public virtual ICollection<EntradaBascula> EntradaBasculas { get; set; }
}
**そして彼の構成
public class ProveedorConfiguration : EntityTypeConfiguration<Proveedor>
{
public ProveedorConfiguration()
{
ToTable("Proveedor");
//PK
HasKey(p => p.Id_Proveedor);
Property(p => p.Id_Proveedor)
.IsRequired()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(p => p.Codigo)
.IsRequired()
.HasColumnType("varchar")
.HasMaxLength(6);
HasIndex(p => p.Codigo)
.IsUnique();
Property(p => p.RazonSocial)
.IsRequired()
.HasColumnType("varchar")
.HasMaxLength(60);
Property(p => p.Calle)
.IsRequired()
.HasColumnType("varchar")
.HasMaxLength(40);
Property(p => p.Colonia)
.HasColumnType("varchar")
.HasMaxLength(30);
Property(p => p.CCodigoPostalId)
.IsRequired()
.HasColumnType("int");
Property(p => p.Telefonos)
.HasColumnType("varchar")
.HasMaxLength(30);
Property(p => p.RFC)
.HasColumnType("varchar")
.HasMaxLength(13);
HasIndex(p => p.RFC)
.IsUnique();
Property(p => p.CuentaContableId)
.IsRequired();
Property(p => p.DiasCred)
.IsRequired()
.HasColumnType("smallint");
Property(p => p.SaldoMN)
.IsRequired()
.HasColumnType("decimal")
.HasPrecision(10, 2);
Property(p => p.AnticipoMN)
.IsRequired()
.HasColumnType("decimal")
.HasPrecision(10, 2);
Property(p => p.SaldoDlls)
.IsRequired()
.HasColumnType("decimal")
.HasPrecision(8, 2);
Property(p => p.AnticipoDlls)
.IsRequired()
.HasColumnType("decimal")
.HasPrecision(8, 2);
Property(p => p.Contacto)
.HasColumnType("varchar")
.HasMaxLength(60);
Property(p => p.Email)
.HasColumnType("varchar")
.HasMaxLength(90);
Property(p => p.Municipio)
.HasColumnType("varchar")
.HasMaxLength(50);
Property(p => p.Estado)
.HasColumnType("varchar")
.HasMaxLength(31);
Property(p => p.Ciudad)
.HasColumnType("varchar")
.HasMaxLength(45);
Property(p => p.Estatus)
.IsRequired();
//Relationships
//FK Proveedor -> ValeVehiculoCombustible
HasMany(p => p.ValeVehiculoCombustibles)
.WithOptional(v => v.Proveedor)
.HasForeignKey(v => v.ProveedorId)
.WillCascadeOnDelete(false);
//PK Proveedor -> FacturaProveedor
HasMany(p => p.FacturaProveedors)
.WithRequired(f => f.Proveedor)
.HasForeignKey(f => f.ProveedorId)
.WillCascadeOnDelete(false);
//FK Proveedor -> EntradaBasucla
HasMany(p => p.EntradaBasculas)
.WithRequired(e => e.Proveedor)
.HasForeignKey(e => e.ProveedorId)
.WillCascadeOnDelete(false);
}
}
**そして最後に、デバッグモードでのクエリの結果が返されます...
にバインドすることはできませんTargetNullValue
。そこにはハードコードされた値しか入れることができません。バインドする場合DataGridTemplateColumn
は、Textblock
とを使用し、でを使用しDataTrigger
て値を変更できます。
だから、デフォルトTextblock
にバインドするためにMunicipio
、それはだ場合、{x:Null}
後にバインドCCodigoPostal.Municipio
。
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Municipio}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="{Binding Path=Municipio}"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Municipio}" Value="{x:Null}">
<Setter Property="Text" Value="{Binding Path=CCodigoPostal.Municipio}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
あなたが上を超えて行きたい(そしてそれを正しくやりたい)なら、あなたDataTemplate
はあなたのリソースを作り、すべてのxaml
正しいものをインラインにする代わりにそれを参照するでしょう。
リソースを使用する場合は、をに入れDataTemplate
ますWindows.Resources
。
<Window.Resources>
<DataTemplate x:Key="template">
<TextBlock Text="{Binding Path=Municipio}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="{Binding Path=Municipio}"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Municipio}" Value="{x:Null}">
<Setter Property="Text" Value="{Binding Path=CCodigoPostal.Municipio}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</Window.Resources>
次に、を設定しCellTemplate
ます。
<DataGrid x:Name="grid" Grid.Row="3">
<DataGrid.Columns>
<DataGridTemplateColumn CellTemplate="{StaticResource template}">
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加