.net - varios - wpf binding code behind
Enlace al parámetro convertidor (3)
¿Es posible enlazar a un ConvertidorParameter en Silverlight 4.0?
Por ejemplo, me gustaría hacer algo como esto y unir el ConvertidorParameter a un objeto en un ViewModel, por ejemplo.
Si esto no es posible, ¿hay alguna otra opción?
<RadioButton
Content="{Binding Path=Mode}"
IsChecked="{Binding
Converter={StaticResource ParameterModeToBoolConverter},
ConverterParameter={Binding Path=DataContext.SelectedMode,ElementName=root}}"
/>
Desafortunadamente, no, no puedes enlazar a un ConvertidorParámetro. Hay dos opciones que he usado en el pasado: en lugar de usar un convertidor, crea una propiedad en tu ViewModel (o lo que sea que quieras vincular) que hace la conversión por ti. Si todavía desea ir a la ruta del convertidor, pase todo el objeto encuadernado al convertidor y luego puede hacer su cálculo de esa manera.
Otra opción es hacerse elegante creando un convertidor personalizado que envuelva su otro convertidor y pase en un param convertidor de una propiedad. Siempre que este convertidor personalizado herede DependencyObject y use DependencyProperty, se puede vincular a. Por ejemplo:
<c:ConverterParamHelper ConverterParam="{Binding ...}">
<c:ConverterParamHelper.Converter>
<c:RealConverter/>
</c:ConverterParamHelper.Converter>
</c:ConverterParamHelper>
Sé que es una vieja pregunta, pero tal vez esto sea útil para alguien que la haya encontrado. La solución que encontré es la siguiente:
public class WattHoursConverter : FrameworkElement, IValueConverter
{
#region Unit (DependencyProperty)
/// <summary>
/// A description of the property.
/// </summary>
public string Unit
{
get { return (string)GetValue(UnitProperty); }
set { SetValue(UnitProperty, value); }
}
public static readonly DependencyProperty UnitProperty =
DependencyProperty.Register("Unit", typeof(string), typeof(WattHoursConverter),
new PropertyMetadata("", new PropertyChangedCallback(OnUnitChanged)));
private static void OnUnitChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((WattHoursConverter)d).OnUnitChanged(e);
}
protected virtual void OnUnitChanged(DependencyPropertyChangedEventArgs e)
{
}
#endregion
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
// you can use the dependency property here
...
}
}
y en tu xaml:
<UserControl.Resources>
<converters:WattHoursConverter x:Key="WattHoursConverter" Unit="{Binding UnitPropFromDataContext}"/>
</UserControl.Resources>
....
<TextBlock Grid.Column="1" TextWrapping="Wrap" Text="{Binding TotalCO2, Converter={StaticResource KgToTonnesConverter}}" FontSize="13.333" />