안드로이드 레이아웃 요소에 여러 속성을 어떻게 바인딩합니까
-
12-12-2019 - |
문제
내 뷰 모델을 안드로이드 뷰 레이아웃에 데이터 바인딩하는 데 사용하고 있습니다.
단순 바인딩 예에서 나는 값을 속성에 바인딩하기 위해 이것을 수행한다는 것을 볼 수 있습니다:
<EditText
android:hint="Subtotal"
android:gravity="left"
android:inputType="numberDecimal"
android:maxLines="1"
android:numeric="decimal"
local:MvxBind="{'Text':{'Path':'SubTotal','Converter':'Float'}}"
/>
따라서 텍스트는 뷰 모델의 부분합 속성에 바인딩됩니다.그러나 하나 이상의 속성에 어떻게 바인딩합니까?내 경우에는 레이아웃 요소의 텍스트 색상 속성에 하이어로어라는 뷰 모델 속성을 바인딩하고 싶습니다.배열에 다른 바인드를 추가 할 수 없으며 배열에 바인드를 설정할 수 없습니다.
해결책
바인딩 식에 사용되는 제손의 형식은 명명된 사전입니다 웹 사이트s
public class MvxJsonBindingDescription
{
public string Path { get; set; }
public string Converter { get; set; }
public string ConverterParameter { get; set; }
public string FallbackValue { get; set; }
public MvxBindingMode Mode { get; set; }
}
이것은:
- 사전 키 이름은 바인딩의 대상(보기)속성입니다.
- 바인딩
Path
속성은 바인딩의 소스(데이터 텍스트)속성입니다.Path
지정되지 않은 경우 전체 데이터 텍스트 자체가 바인딩 소스입니다.
데이터 컨텍스트는 일반적으로 뷰 모델의 자식 객체입니다.목록 보기 내에서 데이터 컨텍스트는 뷰 모델이 소유한 목록 또는 관찰 가능한 컬렉션 내의 항목일 수 있습니다.
여러 바인딩을 지정하려면 다음과 같이 사용할 수 있습니다:
{
'TargetProperty1':{'Path':'SourceProperty1'},
'TargetProperty2':{'Path':'SourceProperty2'}
}
귀하의 특정 예에 대해 이것은 다음과 같을 수 있습니다:
local:MvxBind="
{
'Text':{'Path':'SubTotal','Converter':'Float'},
'TextColor':{'Path':'HigherLower','Converter':'MyColorConverter'}
}"
귀하의 뷰 모델이 다음과 같은 위치:
public class MyViewModel : IMvxViewModel
{
public float SubTotal { get; set; }
public bool HigherLower { get; set; }
// more code here
}
그리고 당신의 변환기는 다음과 같습니다:
public class MyColorConverter : MvxBaseColorConverter
{
protected override MvxColor Convert(object value, object parameter, CultureInfo culture)
{
return ((bool)value) ? new MvxColor(255,0,0) : new MvxColor(0,255,0);
}
}
그리고 설정 중에 해당 변환기가 초기화되는 곳(예:어떻게 속성 참조 변환기 클래스는 트위터 검색
작업 중인 여러 바인딩을 보여주는 하나의 샘플은 베스트셀러입니다. https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20BestSellers/BestSellers/BestSellers.Droid/Resources/Layout/ListItem_Category.axml
다른 팁
경로 ':'Highlloweryou는 다음을 수행해야합니다.
local:MvxBind="{'Text':{'Path':'SubTotal','Converter':'Float'}, 'TextColor':{'Path':'HigherLower','Converter':'Color'}}"
.
참고 사항 :
bind="{ 'Text':{xx}, 'Other':{yy} }"
.