2016-06-29 1 views
1

런타임시 iOS 용 MVVM 십자형의 문자열 서식 지정과 관련된 Stuart'sanswer의 확장 요구 사항이 있습니다.MVVM 복잡한 형식 문자열을 사용한 교차 바인딩

local:MvxBind="Text 'Awaiting ' + Name + ' For 10 Minutes' " /> 

지금까지

시도 : 나는 런타임에 복잡한 객체를 전달하고 기본적으로 나는 티벳과 같이 바인딩 안드로이드 수 같은 일을 달성하기 위해 값 변환기에서 그것을 평가할
set.Bind(txtTitle).To(vm => vm.Name).WithConversion("StringFormatPlus", new { before = "Awaiting", after = " For 10 minutes" }); 

나는 동적으로 개체 매개 변수를 캐스팅 시도했지만 Microsoft C의 날카로운 dll에 대한 참조가 필요하므로 잘 모르겠습니다.

public class StringFormatPlusValueConverter : MvxValueConverter 
{ 
    public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value == null) 
      return null; 

     if (parameter == null) 
      return value; 

     var dynamicParameter = parameter as dynamic; 
     var before = dynamicParameter.before; 
     var after = dynamicParameter.after; 

     var format = "{0} {1} {2}"; 

     return string.Format(format, before, value, after); 
    } 
} 

내가 사용하고 해결 방법은 내가 좋아하는 방법 포맷 뷰 모델에 추가 게터 속성을 만드는 것입니다, 그리고 아이폰 OS 뷰 컨트롤러에 그 바인딩. 그것은 작동하지만 이상적이 아니며 강하게 결합 된 뷰 로직을 사용하여 내 뷰 모델을 혼란스럽게합니다.

답변

4

SourceDescribed 방법을 사용하여 Fluent Binding을 통해 원하는 것을 얻을 수 있습니다. 에서 찾을 수 MvvmCross.Binding.BindingContext 네임 스페이스입니다.

public MvxFluentBindingDescription<TTarget, TSource> SourceDescribed(MvxBindingDescription description); 
public MvxFluentBindingDescription<TTarget, TSource> SourceDescribed(string bindingDescription); 

구현 예 :

set.Bind(txtTitle).SourceDescribed("'Awaiting ' + Name + ' For 10 Minutes'"); 
+0

감사 완벽하게 작동 –