3

ItemsSource를 WCF 서비스에서 채워진 CollectionViewSource로 설정하는 ListBox가 있습니다. ItemsSource의 개체에 대한 속성을 변환하기 위해 ListBox.ItemTemplate \ DataTemplate의 값 변환기를 사용합니다.Codebehind 변수를 ValueConverter의 ConverterParameter 입력으로 사용하는 방법

이 모든 것이 예상대로 작동하지만 이제는 다른 속성이 특정 값과 같을 때를 제외하고는 변환 된 값이 여전히 개별 개체 속성 값을 기반으로하는 변환 프로세스를 업데이트해야합니다. 그리고 그 값은 xaml의 코드 배후에서 설정됩니다. 이것은 페이지 생성자에서 설정된 필드 레벨 변수입니다.

이렇게하려면 필드 레벨 변수를 ValueConverter의 ConverterParameter로 전달해야합니다. 나는 항상 xaml을 파싱하는 데 오류가 발생한다는 것을 제외하면이 this question의 아이디어를 사용하여 여러 가지 방법을 시도했다.

하나의 해결 방법으로 ItemsSource의 개체에 속성을 추가 할 수 있지만 실제로 그렇게하고 싶지는 않습니다. 부분적으로 그 객체가 여러 프로젝트에서 사용 되었기 때문에 나는 ....을 바꾸고 싶지 않습니다. 왜냐하면 다른 방법이 가능하기를 원하기 때문입니다. 또한 wpf MultiValue 변환기 (그리고 어쩌면 SL 4.0)하지만 난 SL 3.0에있어 믿습니다.

내 생각 엔 xaml의로드, 바인딩 및 구문 분석의 타이밍 때문에 지금까지 내가 겪어 왔던 문제가 있습니다.

그래서 몇 가지 질문 : 나는 위의 설명과 같이 이것은

  • 을 할 수 있는가?
  • 문제가 아니라면 무엇입니까?
  • 개체에 속성을 추가하지 않으면 다른 방법이 있습니까?

답변

5

이 경우에는 ConverterParameter이라는 바인딩을 사용하고 싶습니다. 내가 올바르게 이해했다면이 매개 변수에 할당하려는 UserControl 수준에서 단일 값을 유지하게되므로 모든 인스턴스의 매개 변수 값이 동일하게됩니다.

대신에 내가 취하는 접근법은 변환기 코드 자체에 속성을 추가하는 것입니다.

public class ExampleConverter : IValueConverter 
{ 

    public int SpecialValue { get; set; } 

    public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value != null) 
     { 
      if (value.Equals(SpecialValue)) 
       return "Special!"; 
      else 
       return value.ToString(); 
     } 
     else 
     { 
      return null; 
     } 
    } 

    public override object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

는 이제이 변환기는 UserControl을 자원에 추가 한 것 : - 당신은 UserControl을 코드에서 값을 수정해야하는 경우

<UserControl.Resources> 
    <local:ExampleConverter x:Key="conv" SpecialValue="-1" /> 
</UserControl.Resources> 

당신이 사용하는 것 : -

((ExampleConverter)Resources["conv"]).SpecialValue = someOtherVariable; 
+0

이 작품을 고마워, 나는 내 테스트에서 내 문제 중 일부는 내가 변환기를 리소스로 메인 그리드 UserControl에 넣어 왔다는 사실이 의심된다. –

관련 문제