문제

WPF 학습의 일환으로 나는 "WPF에서 데이터 바인딩 사용"이라는 MS 실험실 운동을 마쳤습니다.http://windowsclient.net/downloads/folders/hands-on-labs/entry3729.aspx).

Imultivalueconverter를 사용하기 위해 부울 결과가 현재 사용자와 관련이 있는지 여부를 결정하는 데 부울 결과가 사전 코딩 된 구현이 있습니다. 변환 작업의 코드는 다음과 같습니다.

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) {
        // var rating = int.Parse(values[0].ToString());
        var rating = (int)(values[0]);
        var date = (DateTime)(values[1]);

        // if the user has a good rating (10+) and has been a member for more than a year, special features are available
        return _hasGoodRating(rating) && _isLongTimeMember(date);
    }

그리고 다음은 XAML에서 이것을 사용하기위한 배선입니다.

<ComboBox.IsEnabled>
    <MultiBinding Converter="{StaticResource specialFeaturesConverter}">
    <Binding Path="CurrentUser.Rating" Source="{x:Static Application.Current}"/>
    <Binding Path="CurrentUser.MemberSince" Source="{x:Static Application.Current}"/>
    </MultiBinding>
</ComboBox.IsEnabled>

코드는 정상적으로 실행되지만 XAML 디자이너는 "지정된 캐스트가 유효하지 않음"으로로드되지 않습니다. 오류. 나는 캐스트를 사용하지 않는 몇 가지 방법을 시도했는데, 그 중 하나는 위의 코드에 무의미한 상태를 유지했습니다. 재미있는 것은 MS가 제공하는 완성 된 실험실 운동입니다. 오류가 있습니다.

디자이너를 행복하게 만들기 위해 그것을 고치는 방법을 아는 사람이 있습니까?

건배,
베리

도움이 되었습니까?

해결책

문제는 디자인 모드와 런타임에 다른 Application.Current를 사용한다는 것입니다.

디자이너를 열면 Application.current는 "앱"클래스 (또는 이름이 무엇이든)가 아닙니다. 따라서 Currentuser 속성이 없으며 그 오류가 발생합니다.

그것을 고치는 방법에는 여러 가지가 있습니다. 가장 쉬운 것은 디자인 모드인지 확인하는 것입니다.

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
  if (Application.Current == null ||
      Application.Current.GetType() != typeof(App))
  {
    // We are in design mode, provide some dummy data
    return false;
  }

  var rating = (int)(values[0]);
  var date = (DateTime)(values[1]);

  // if the user has a good rating (10+) and has been a member for more than a year, special features are available
  return _hasGoodRating(rating) && _isLongTimeMember(date);
}

또 다른 접근법은 Application.Current를 바인딩 소스로 사용하지 않는 것입니다.

도움이 되었기를 바랍니다 :).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top