2013-10-14 7 views
2

MvvmCross의 데이터 바인딩에 유창한 구문과 람다를 사용하고 있습니다. 이것의 예는 다음과 같습니다 위치에 예기치 않은 문자 _ :MvvmCross 데이터 바인딩의 밑줄

Cirrious.CrossCore.Exceptions.MvxException :

var bindings = this.CreateBindingSet<MyTableCell, MyTableCellViewModel>(); 
bindings.Bind(titleLabel).To(vm => vm.MY_TITLE); 
bindings.Apply(); 

내가보기 모델 속성에 밑줄이 시도 할 때마다 나는 예외가 targetProperty 텍스트 MY_TITLE에서 3

나는 오류 메시지가 데이터 바인딩을 구문 분석 MvvmCross의 결과라고 생각하면서도이 아닌 람다에만 바인딩 문자열 기반 데이터를 사용하는 사람들에 대한 이해가 보인다 표현 구문.

보기 모델에서 밑줄을 허용하는 해결 방법을 찾고 있으므로 불행히도보기 모델을 변경할 수 없습니다. 어떤 아이디어?

답변

2

나는 이것이 MvvmCross 파서의 일반적인 문제입니다 추측에는 요 - 아마

private void ParsePropertyName() 
    { 
     var propertyText = new StringBuilder(); 
     while (!IsComplete && char.IsLetterOrDigit(CurrentChar)) 
     { 
      propertyText.Append(CurrentChar); 
      MoveNext(); 
     } 

     var text = propertyText.ToString(); 
     CurrentTokens.Add(new MvxPropertyNamePropertyToken(text)); 
    } 

에서 https://github.com/MvvmCross/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding/Parse/PropertyPath/MvxSourcePropertyPathParser.cs#L80

에서 아마 같은 것을 고정 할 필요가 :

 while (!IsComplete && 
       (char.IsLetterOrDigit(CurrentChar) || CurrentChar == '_') 

해결 방법이 있지만 가능한 가장 쉬운 해결책은 해결 방법을 시도하는 것보다는이를 수정하고 다시 작성하는 것입니다. 이 정적 인 가정 (비 변화) 텍스트 ....

해결 방법을 시도하고 싶어이 지금은 단지 일회성 인 경우, 그때 하나의 해결 방법에


수 있습니다 Hack라는 셀에 속성을 추가 한 다음 바인딩 같은 :

bindings.Bind(this).For(v => v.Hack).To(vm => vm); 

//... 

private MyTableCellViewModel _hack; 
public MyTableCellViewModel Hack 
{ 
    get { return _hack; } 
    set { _hack = value; if (_hack != null) titleLabel.Text = _hack.MY_VALUE; } 
} 

(같은 가정에) 또 다른 방법은 값 변환기를 사용하는 수 있습니다 -

bindings.Bind(titleLabel).To(vm => vm.MY_TITLE).WithConversion(new WorkaroundConverter(), null); 

// ... 

public class WorkaroundConverter : MvxValueConverter<MyTableCellViewModel, string> 
{ 
    protected override string Convert(MyTableCellViewModel vm, /*...*/) 
    { 
     if (vm == null) return null; 
     return vm.MY_TITLE; 
    } 
} 
+0

나는 소스 코드에 수정을 가했다. (그리고 다시 깨지지 않는지 테스트했다.) - https://github.com/MvvmCross/MvvmCross/issues/461에 링크 된 커밋 참조. – Stuart

+0

고맙다. 스튜어트! 언제나처럼 똑똑하고 믿을 수없는 응답 시간. – kwl

+0

수정 프로그램이 밑줄로 시작하는 변수를 해결하지 못하는 것 같습니다 (나는 우리가 미친 뷰 모델을 가졌음). 문제는'ParseNextToken'에있는 것 같습니다. – kwl

관련 문제