Namngivning i användargränssnittet
En Dynamix-lösning består normalt av ett antal egendefinierade typer. Det kan röra sig om Dynamix-Objekt som modellerar t ex produkter eller händelser. Det kan vara enumerationer som modellerar olika inställningar. Eftersom det stora flertalet av gränssnitten skapas helt eller delvis automatiskt av Dynamix behöver man som utvecklare tala om för systemet hur objekt ska namnges i listor och kontroller.
Objekt
När det gäller objekt skiljer man mellan instansnamn och typnamn. Instansnamnet hämtas oftast ur en av objektets egenskaper eller ur en kombination av egenskaper. För ett produktobjekt kan det vara nameegenskapen och för en nyhetspost kanske det är rubrikegenskapen.
Rent praktiskt överlagras funktionen IName_Name i klasser som ärver från Dynamix.Object:
- C#
- VB
protected override string IName_Name
{
get { return Name; }
}
Instansnamnet används till exempel i listor över objekt:
Typnamnet används när systemet vill veta namnet på själva klassen av objekt. För en produkt är typnamnet "Produkt" och för en nyhet "Nyhet". Denna inställning görs genom att redigera .dx-filen i Visual Studio, fliken UI/Editiing
Andra typer av objekt
För att namnge instanser av klasser som inte ärver från Dynamix.Object implementeras interfacet Dynamix.IName
- C#
- VB
public class MyClass : Dynamix.IName
{
public string Name
{
get { return ...; }
}
}
För typnamnet används attributet Dynamix.Ui5.NameAttribute:
- C#
- VB
[Dynamix.Ui5.Name( Name="Min klass" )]
public class MyClass : Dynamix.IName
{
...
}
Enumerationer
Enum är en inbyggd typ som inte går att ärva från. Vi kan alltså inte implementera IName direkt för våra enum-typer. Här används därför Dynamix Provider-teknik, dvs vi definierar en typ som kan svara på frågor om objekt av en annan typ, i det här fallet vår enum-typ. Provider-typen anges med attributet Dynamix.Ui5.NameProvider:
- C#
- VB
[Dynamix.Ui5.NameProvider( ProviderType=typeof( MyEnumNameProvider ) )]
public enum MyEnum
{
Red,
Green,
Blue
}
public class MyEnumNameProvider : INameProvider
{
public string GetName( object x )
{
var val = (MyEnum)x;
switch( val )
{
case MyEnum.Red: return "Röd";
case MyEnum.Green: return "Grön";
case MyEnum.Blue: return "Blå";
default: throw new ArgumentOutOfRangeException();
}
}
}