2012-05-02 2 views
1

대부분의 컨버터는 어떤 매개 변수를 사용하지 않거나 하나의 고정 매개 변수와 결합하기 쉬운 :바인더 블 변환기 매개 변수를 사용하여 변환기를 만드는 방법은 무엇입니까?

<local:MyConverter x:Key="MyConverterInstance" /> 

<TextBox Text="{Binding Path=MyTime, 
         Converter={StaticResource MyConverterInstance}, 
         ConverterParameter='yyyy/MM/dd'}" /> 

하지만 원하는 경우 그 형식은 사용자가 변경할 수있는 동적 인 특성으로, 내가 뭔가를 할 수 없어 오른쪽과 같이?

<TextBox Text="{Binding Path=MyTime, 
         Converter={StaticResource MyConverterInstance}, 
         ConverterParameter={Binding Path=UserFormat}}" /> 

그래서 내 유일한 옵션은 바인딩 MyConverter에하는 DependencyProperty를 정의하는 것입니다. 하지만 내 변환기 정의 StaticResource입니다. StaticResources에는 DataContext를가 없기 때문에 나는

<local:MyConverter x:Key="MyConverterInstance" 
        Format="{Binding Path=UserFormat}"/> 

을 갈 수 없습니다. 이것을 어떻게 설정할 수 있습니까?

답변

5

converterparameter에 바인딩 할 수는 없지만 대신 Multibinding을 사용할 수 있습니다. 예를 들어 : http://www.switchonthecode.com/tutorials/wpf-tutorial-using-multibindings 또는 How to simply bind this to ConverterParameter?

(알랭) 그러니이 질문에 일치하는 무언가로 링크 된 대답을 번역하기 :

<TextBlock> 
    <TextBlock.Resources> 
     <local:MyConverter x:Key="MyConverterInstance" /> 
    </TextBlock.Resources> 
    <TextBlock.Text> 
     <MultiBinding Converter="{StaticResource converter}"> 
      <Binding Path="MyTime" /> 
      <Binding Path="UserFormat" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

public class MyConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
    DateTime time = (DateTime)values[0]; 
    string format = values[1].ToString(); 
    return time.ToString(format); 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
    throw new NotImplementedException(); 
    } 
} 
+0

좋아 우리에 동등 위의 XAML을 가지고 있다면 그래서 뭐 무슨 링크 된 질문 솔루션, 어떻게 내 변환기에 맞게 - 얻을 수있는 'MyTime' '값'매개 변수에 들어갈 수 및 'UserFormat'매개 변수 '매개 변수에 들어가야합니다. 변환기 변환 메소드의 서명이'public object Convert (오브젝트 값, 유형 targetType, 오브젝트 매개 변수, CultureInfo culture)'임을 기억하십시오. – Alain

+0

내가 보낸 첫 번째 링크를 살펴보십시오. IMultiValueConverter에서 상속받은 경우 값 배열을 갖게됩니다. –

관련 문제