2012-05-08 10 views
5

मैं एंड्रॉइड में इसे शुरू करने वाली क्रॉस-प्लेटफ़ॉर्म ऐप विकसित कर रहा हूं। मुझे आपकी एमवीवीएमसीआर परियोजना मिली है और मैं इसमें शामिल होने की कोशिश कर रहा हूं। अभी मैं इसके लिए बिल्कुल नया हूं और मुझे नहीं पता कि मेरी वेब सेवा-बाइंड को कैसे जोड़ना है मेरी सूची दृश्य में परिणाम। उदाहरण के रूप में XAML का यहाँ थोड़ा मैं इसे कैसे कोशिश कर रहा हूँ:एंड्रॉइड में एमवीवीएमसीआर बाइंडिंग

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'}}" /> 

तरह लग रहा है जब मैं अंतिम दो पंक्तियों टूलटिप कहते विशेषता घोषित नहीं किया गया है मँडरा रहा हूँ। मैं वास्तव में नहीं जानता कि आप यह कैसे करते हैं। क्या आप मुझे कुछ सलाह दे सकते हैं? मुझे लगता है कि मुझे अपने यूआई प्रोजेक्ट के मानों में कुछ एक्सएमएल लिखना है, है ना?

एक और सवाल: मैं AutoCompleteTextViews का उपयोग कैसे कर सकता हूं? क्या मुझे इसके लिए अपना खुद का एमवीएक्सबिंडबल्स लिखना है? कोई सलाह? :-)

+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 - -

आप भी अपने यूआई परियोजना में MvxBindingAttributes.xml फ़ाइल को शामिल करने की जरूरत है और आप, इस फ़ाइल की "AndroidResource"

एक उदाहरण के लिए के निर्माण कार्रवाई सेट एंड्रॉयड नमूना परियोजनाओं के किसी भी देखना होगा - https://github.com/slodge/MvvmCross


जोड़ने बाइंडिंग बारे में अपने प्रश्न के दूसरे भाग के लिए, बंधन ढांचे चाहिए स्वचालित रूप से एक तरह से बाँध किसी भी Monodroid देखें/विजेट पर मौजूदा सार्वजनिक गुण के लिए (ViewModel से दृश्य)।

यदि सार्वजनिक संपत्ति सही प्रकार का नहीं है (उदा। यह दृश्य के बजाय कुछ एंड्रॉइड गणना है), तो आप रूपांतरण करने के लिए IMvxValueConverter का उपयोग कर सकते हैं।

यदि आप 2-तरफा बाध्यकारी करना चाहते हैं, या आप जो बाध्य करना चाहते हैं उसके लिए कोई सार्वजनिक संपत्ति नहीं है, तो आप एक कस्टम बाध्यकारी आसानी से आसानी से करते हैं। इसके उदाहरण के लिए, the conference sample

में यह कस्टम IsFavorite 2 तरीके बाध्यकारी देखें, यह कोड प्रत्येक एंड्रॉइड बटन पर एक नई बाइंडेबल छद्म-संपत्ति "IsFavorite" जोड़ता है।

... इस तरह कोड का उपयोग कर Setup.cs में initialised है:

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