get the solution

Blog

Martin Martin
25.02.2009 19:49

Einfacher zugriff auf Converter in XAML ermöglichen



In der Literatur ist mir noch kein einfaches Verfahren untergekommen im XAML einfach auf die Converter zu zugreifen. Normalerweise greift man in XAML wie folgt auf die Converter zu.

C# - Der Converter:
 

public class DateTimeToIntConverter : System.Windows.Data.IValueConverter
	
		{
		    public object Convert(object value, Type targetType, object parameter, 
		      System.Globalization.CultureInfo culture)
	
		    {
		      throw new NotImplementedException();
		    }
		 
		    public object ConvertBack(object value, Type targetType, object parameter,
		      System.Globalization.CultureInfo culture)
	
		    {
		        throw new NotImplementedException();
		    }
		}

Im XAML Code:
 

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
		    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	
		    xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit"
		    xmlns:convertrs="clr-namespace:UserControl.Converters"
		    xmlns:local="clr-namespace:UserControl">
		    >
	
		 
		    <!-- 
		        Zugriff fuer Converter DateTimeToIntConverter, zugegriffen wird ueber DateTimeToIntConv
		    -->
		    <convertrs:DateTimeToIntConverter x:Key="DateTimeToIntConv"/>
		 
		    <DataTemplate  DataType="{x:Type local:Class}">
	
		        <Grid>
		            <!-- 
		              Mit Converter={StaticResource DateTimeToIntConv}} uebergeben wir das
		 Bindende-Element dem Conveter
		            -->
		            <TextBlock Name="Monat" Text="{Binding Path=Monat,
		Converter={StaticResource DateTimeToIntConv}}"></TextBlock>
	
		        </Grid>
		    </DataTemplate>
		</ResourceDictionary>

Über dieses Verfahren wird die Zeile <convertrs:DateTimeToIntConverter x:Key="DateTimeToIntConv"/> benötigt. Schön wäre es, wenn wir diese Zeile wegfallen lassen könnten.

Das kann man in dem wir im Namespace in dem sich die Converter befinden eine Hilfsklasse erstellt. Diese enthält Zugriffspunkte (Statische Members) mit denen wir auf die Converter zugreifen können.

Wir fügen in den Namensraum in dem unsere DateTimeToIntConverter Klasse ist (bei mir UserControl.Converters) die unten stehende Hilfsklasse hinzu. Haben wir einen neuen Converter erstellt fügen wir ein neues Member in unsere Hilfsklasse Converters hinzu, damit wir später von XAML aus auf den Converter zugreifen können. Das Member hat als ObjektTyp die Converter-Klasse die wir erstellt haben.
 

public static class Converters
		{
		    public static DateTimeToIntConverter DateTimeToIntConverter = new DateTimeToIntConverter();
		    public static DateTimeToWoTagConverter DateTimeToWoTagConverter = new DateTimeToWoTagConverter();
		    public static DateTimeToDayConverter DateTimeToDayConverter = new DateTimeToDayConverter(); 
		 
	
		}
		 
		#region Klassen : IValueConverter
		public class DateTimeToDayConverter : System.Windows.Data.IValueConverter
	
		{
		[...]

Nun kann man im XAML elegant auf den Converter zugreifen.
 

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	
			    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
			    xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit"
			    xmlns:converters="clr-namespace:UserControl.Converters"
			    xmlns:local="clr-namespace:UserControl">
	
			    >
			    <DataTemplate  DataType="{x:Type local:Class}">
			        <Grid>
			            <!-- 
			              converters...Zugriff auf Namespace
			              Converters...Hilfsklassename
			              DateTimeToDayConverter...Membername	              
			            -->
			            <TextBlock Name="Monat" Text="{Binding Path=Monat,
			Converter={x:Static converters:Converters.DateTimeToDayConverter}}"></TextBlock>
	
			        </Grid>
			    </DataTemplate>
			</ResourceDictionary>

Das war keine große Hexerei.  Der Zugriff erscheint mir auf diesem Weg logischer und nachvollziehbarer.

Hier das Beispiel:


Schlüsselwörter: WPF, XAML, C#
zuletzt geändert: 19. September 2010 15:24
Link zu diesem Artikel: (in die Zwischenablage)





(c) 2011 | Impressum |

| Empfehlenswerte Blog Einträge