[.net] 변환기 매개 변수에 바인딩


Answers

유감스럽게도 아니, 당신은 ConverterParameter에 바인딩 할 수 없습니다. 과거에 사용한 적이있는 두 가지 옵션이 있습니다. 변환기를 사용하는 대신 ViewModel (또는 바인딩 대상)에 대한 변환을 수행하는 속성을 만듭니다. 변환기 경로를 계속 가고 싶다면 전체 바인딩 된 개체를 변환기로 전달한 다음 그런 식으로 계산을 수행 할 수 있습니다.

Question

Silverlight 4.0에서 ConverterParameter에 바인딩 할 수 있습니까?

예를 들어, 나는이 일을하고 ViewPod를 ViewModel의 객체에 바인딩하려고합니다.

이것이 가능하지 않으면 다른 옵션이 있습니까?

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



다른 옵션은 다른 변환기를 래핑하고 특성에서 변환기 매개 변수를 전달하는 사용자 지정 변환기를 작성하여 멋지게 만드는 것입니다. 이 사용자 지정 변환기가 DependencyObject를 상속하고 DependencyProperty를 사용하는 한 바인딩 될 수 있습니다. 예 :

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

    <c:ConverterParamHelper.Converter>

        <c:RealConverter/>

    </c:ConverterParamHelper.Converter>

</c:ConverterParamHelper>



나는 그것이 오래된 질문이라는 것을 알고 있지만 어쩌면이 질문은 누군가에게 유용 할 것입니다. 내가 찾은 해결책은 다음과 같습니다.

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" />