Pregunta

manera más común que me encontré de especificar un convertidor de valores para una unión es:
1. Crear una instancia del convertidor de valores como un recurso con una llave.
2. Referencia la instancia utilizando extensión de marcado StaticResource:

<TextBlock Text="{Binding Converter={StaticResource myFormatter}" />  

Q: ¿Hay algo malo con el uso instancia estática de la siguiente manera:

<TextBlock Text="{Binding Path=Description, Converter={x:Static local:MyFormatter.Instance}}"/>

// where Instance is declared as:
public readonly static MyFormatter Instance = new MyFormatter();

En mi caso convertidor de valores es inmutable.

Editar de convertir el convertidor en una extensión de modo que especifique el convertidor utilizando el formato de extensión de marcado:

<TextBlock Text="{Binding Converter={local:MyFormatter}}"/>
¿Fue útil?

Solución

Técnicamente se va a estar bien, pero en la práctica no me gusta que:

  1. Si se declara el convertidor como un recurso, entonces usted tiene un único punto de referencia. Si cambia el espacio de nombres o tipo de nombre del convertidor, a continuación, sólo tiene un único lugar para actualizar.

  2. Si se declara como estática, entonces usted necesita para llevar el clr-namespace en la parte superior de cada archivo XAML que utiliza el convertidor. Si se declara como un recurso, no lo hace.

  3. {Binding Converter={StaticResource myFormatter} es mucho más corto y más fácil de leer que el estático. A la larga, esto le ayudará más de lo que parece.

Otros consejos

Mientras el formateador realmente no tiene ningún estado, esta debe estar bien. No es equivalente sin embargo. En el primer caso, tiene una instancia de la clase para cada instancia de su control basado en XAML. En el segundo, cada vez se creará una única instancia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top