2012-05-08 6 views
5

나는 안드로이드에서 시작하는 크로스 플랫폼 앱을 개발 중입니다. MVVMCross 프로젝트를 찾았고 그 프로젝트에 착수하려고합니다. 지금 당장은 완전히 익숙하지 않아 내 WebService-Results를 내 ListView에 바인딩하는 방법을 알지 못합니다. 나는 그것을 시도하고 방법을 예로 들어 XAML의 여기에 비트 : 나는 툴팁 속성이 선언되지 않았습니다 말한다 마지막 두 줄을 유혹있을 때안드로이드에서 MVVMCross 바인딩

xmlns:mobsales="http://schemas.android.com/apk/res/MobSales.DroidUI" 
... 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_marginLeft="5dp" 
mobsales:MvxItemTemplate="@layout/listitem_customer" 
mobsales:MvxBind="{'ItemSource':{'Path':'Customer'}}" /> 
... 

정확히

<cirrious.mvvmcross.binding.android.views.MvxBindableListView 
     android:id="@+id/autocomplete" 
     android:layout_below="@id/txtfield" 
     android:layout_centerHorizontal="true" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="5dp" 
     mobsales:MvxItemTemplate="@layout/listitem_customer" 
     mobsales:MvxBind="{'ItemSource':{'Path':'Customers'}}" /> 

것 같습니다. 너 정말 어떻게하는지 모르겠다. 조언 좀 해줄 수 있니? 내 UI 프로젝트의 Value에 xml을 써야한다고 생각합니다. 맞습니까?

또 다른 질문 : 어떻게 AutoCompleteTextViews를 사용할 수 있습니까? 먼저 자신 만의 MvXBindables를 작성해야합니까? 어떤 충고? :-)

+0

질문 당 하나 개의 질문을하시기 바랍니다 -이에 도움 다른 사람들을위한 문제 및 답변 검색하기. – Stuart

+1

나는 질문을 쪼개었다. 새로운 부분은 이제 끝났습니다. http://stackoverflow.com/questions/10511853/constructor-in-viewmodel – Martin

답변

5

이러한 속성을 바인딩하려면 네임 스페이스를 포함해야합니다. https://github.com/slodge/MvvmCross/blob/master/Cirrious/Cirrious.MvvmCross.Binding/ResourcesToCopy/MvxBindingAttributes.xml - -

은 또한 UI 프로젝트에 MvxBindingAttributes.xml 파일을 포함 할 필요가 있으며, 예를 들어이 파일을 "AndroidResource"

의 빌드 작업을 설정 안드로이드 샘플 프로젝트 중 하나를 참조해야한다 - 추가 바인딩에 대한 질문의 두 번째 부분에 대한 https://github.com/slodge/MvvmCross


, 바인딩 프레임 워크는 자동으로 단방향 바인딩 어떤 Monodroid보기/위젯에 기존 공용 속성에 (뷰 모델에서 설명보기)를해야한다.

Public 속성이 올바른 유형이 아닌 경우 (예 :보기가 아닌 일부 Android 열거 형) IMvxValueConverter를 사용하여 변환을 수행 할 수 있습니다.

양방향 바인딩을 수행하려는 경우 또는 바인딩하려는 대상에 대한 public 속성이없는 경우 사용자 정의 바인딩을 쉽게 수행 할 수 있습니다. 이에 대한 예는 맞춤 IsFavorite 2 웨이 바인딩을 참조하십시오. the conference sample

이 코드는 모든 Android Button에 새로운 바인딩 가능 가상 속성 "IsFavorite"를 추가합니다.

...이 같은 코드를 사용하여 Setup.cs에 초기화된다

protected override void FillTargetFactories(MvvmCross.Binding.Interfaces.Bindings.Target.Construction.IMvxTargetBindingFactoryRegistry registry) 
    { 
     base.FillTargetFactories(registry); 

     registry.RegisterFactory(
        new MvxCustomBindingFactory<Button>(
         "IsFavorite", 
         (button) => new FavoritesButtonBinding(button))); 
    } 

... 그리고 바인딩 코드는 다음과 같습니다

public class FavoritesButtonBinding 
    : MvxBaseAndroidTargetBinding 
{ 
    private readonly Button _button; 
    private bool _currentValue; 

    public FavoritesButtonBinding(Button button) 
    { 
     _button = button; 
     _button.Click += ButtonOnClick; 
    } 

    private void ButtonOnClick(object sender, EventArgs eventArgs) 
    { 
     _currentValue = !_currentValue; 
     SetButtonBackground(); 
     FireValueChanged(_currentValue); 
    } 

    public override void SetValue(object value) 
    { 
     var boolValue = (bool)value; 
     _currentValue = boolValue; 
     SetButtonBackground(); 
    } 

    private void SetButtonBackground() 
    { 
     if (_currentValue) 
     { 
      _button.SetBackgroundResource(Resource.Drawable.star_gold_selector); 
     } 
     else 
     { 
      _button.SetBackgroundResource(Resource.Drawable.star_grey_selector); 
     } 
    } 

    protected override void Dispose(bool isDisposing) 
    { 
     if (isDisposing) 
     { 
      _button.Click -= ButtonOnClick; 
     } 
     base.Dispose(isDisposing); 
    } 

    public override Type TargetType 
    { 
     get { return typeof(bool); } 
    } 

    public override MvxBindingMode DefaultMode 
    { 
     get { return MvxBindingMode.TwoWay; } 
    } 
} 
+0

이 답변을 주셔서 감사합니다! 너 나 많이 도와 줬어! – Martin

+0

쿨 - 여기 또는 http://jabbr.net/#/rooms/mvvmcross에서 더 이상 묻습니다. :) – Stuart

관련 문제