Подтвердить что ты не робот

Связывание с параметром конвертера

Можно ли связать с ConverterParameter в Silverlight 4.0?

Например, я хотел бы сделать что-то подобное и привязать ConverterParameter к объекту в ViewModel, например.

Если это невозможно, есть ли другие варианты?

<RadioButton
  Content="{Binding Path=Mode}"
  IsChecked="{Binding
    Converter={StaticResource ParameterModeToBoolConverter},
    ConverterParameter={Binding Path=DataContext.SelectedMode,ElementName=root}}"
/>
4b9b3361

Ответ 1

К сожалению, нет, вы не можете привязываться к ConverterParameter. Есть два варианта, которые я использовал в прошлом: вместо использования конвертера создайте свойство на вашем ViewModel (или на каком бы то ни было вам привязке), которое делает преобразование для вас. Если вы все еще хотите перейти по пути конвертера, передайте весь связанный объект в конвертер, а затем вы сможете сделать свой расчет таким образом.

Ответ 2

Другим вариантом является получение фантазии, создавая настраиваемый конвертер, который переносит ваш другой конвертер и передает его в параметре преобразователя из свойства. Пока этот пользовательский конвертер наследует DependencyObject и использует DependencyProperty, он может быть связан. Например:

<c:ConverterParamHelper ConverterParam="{Binding ...}">

    <c:ConverterParamHelper.Converter>

        <c:RealConverter/>

    </c:ConverterParamHelper.Converter>

</c:ConverterParamHelper>

Ответ 3

Я знаю, это старый вопрос, но, возможно, это будет полезно для кого-то, кто наткнулся на него. Решение, которое я нашел, следующее:

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
...
}
}

и в вашем 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" />