2016-07-11 3 views
6

मैंने OxyPlot एंड्रॉइड और कोर को Xamarin पीसीएल आधारित प्रोजेक्ट में जोड़ा है जहां मैं MVVMCross का उपयोग कर रहा हूं।Xamarin में एमवीवीएमसीआर के माध्यम से बाध्यकारी ऑक्सीप्लॉट। एंड्रॉइड

मैंने निम्नानुसार अपने एक्सएमएल में साजिशदृश्य जोड़ा है। लेकिन मुझे नहीं पता कि एमवीवीएमसीआरओएस का उपयोग करके इस दृश्य को कैसे बांधना है।

क्या कोई अच्छा उदाहरण या संसाधन पालन करने के लिए है?

MyView.xml

<oxyplot.xamarin.android.PlotView 
android:id="@+id/plot" 
android:layout_width="match_parent" 
android:layout_height="match_parent" /> 

MyView.cs

public class MyView : MvxFragment<MyViewModel> 
{ 
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     var ignored = base.OnCreateView(inflater, container, savedInstanceState); 
     var view = this.BindingInflate(Resource.Layout.MyView, null) 

     MyViewModel MyMainViewModel = new MyViewModel(); 
     var a = view.FindViewById<PlotView>(Resource.Id.plot); 
     a.Model = MyViewModel.MyModel; 

     return view; 
    } 
} 

MyViewModel.cs

public PlotModel MyModel { get; set; } 
public MyViewModel 
{ 
    PlotModel mo = new PlotModel(); 
    var s1 = new LineSeries() 
    { 
    Color = OxyColors.SkyBlue, 
    MarkerType = MarkerType.Circle, 
    MarkerSize = 6, 
    MarkerStroke = OxyColors.White, 
    MarkerFill = OxyColors.SkyBlue, 
    MarkerStrokeThickness = 1.5 
    }; 
    s1.Points.Add(new DataPoint(0, 10)); 
    s1.Points.Add(new DataPoint(10, 40)); 
    s1.Points.Add(new DataPoint(40, 20)); 
    s1.Points.Add(new DataPoint(60, 30)); 
    mo.Series.Add(s1); 
    MyModel = mo; 
} 

ऑक्सीप्लॉट स्थापना

के लिए अतिरिक्त जानकारी मैंने पैकेज कंसोल के माध्यम से निम्नानुसार ऑक्सीप्लॉट जोड़ा है।

पीसीएल

PM> Install-Package OxyPlot.Core -Version 1.0.0-unstable1983 -Pre 

में एंड्रॉयड

PM> Install-Package OxyPlot.Xamarin.Android -Pre 

में या फिर आप भी prelease पुस्तकालय से Nuget कंसोल में जोड़ सकते हैं।

+0

आपको शायद इसके लिए एक कस्टम बाध्यकारी करना चाहिए और हर बार मॉडल बदल जाता है (RaisePropertyChanged()), आप बाध्य ऑक्सीप्लॉट को अमान्य करते हैं। कम से कम इस पर देखकर। मुझे लगता है कि http://stackoverflow.com/questions/10700445/in-mvvmcross-how-do-i-do-custom-bind-properties आपकी मदद कर सकता है, क्योंकि आपको केवल एक-तरफा बाध्यकारी की आवश्यकता होनी चाहिए। अगर आपको और मदद की ज़रूरत है, तो मैं एक उदाहरण बनाने की कोशिश करूंगा। – Cyriac

+0

मैंने जो कोड पोस्ट किया है उसे हटा दिया है और फिर से बनाया है, यह एक आकर्षण की तरह काम करता है। लेकिन अगर आप निम्नलिखित संबंधित प्रश्नों के साथ मेरी मदद कर सकते हैं http://stackoverflow.com/questions/38332858/oxyplot-in-recyclerview-mvvmcross -xamarin-android, यह बहुत उपयोगी होगा – hotspring

उत्तर

7

आपको मानक एमवीएक्स प्रॉपर्टी बाइंडिंग का उपयोग करके आप जो हासिल करना चाहते हैं उसे हासिल करने में सक्षम होना चाहिए। कोई कस्टम बाध्यकारी आवश्यक है।

उदाहरण प्रश्न के आधार पर:

दृष्टिकोण 1: Fluent बाध्यकारी

ViewModel

public class MyViewModel : MvxViewModel 
{ 
    public MyViewModel() 
    { 
     GeneratePlotPoints(); 
    } 

    void GeneratePlotPoints() 
    { 
     var mo = new PlotModel(); 
     var s1 = new LineSeries() 
     { 
      Color = OxyColors.SkyBlue, 
      MarkerType = MarkerType.Circle, 
      MarkerSize = 6, 
      MarkerStroke = OxyColors.White, 
      MarkerFill = OxyColors.SkyBlue, 
      MarkerStrokeThickness = 1.5 
     }; 
     s1.Points.Add(new DataPoint(0, 10)); 
     s1.Points.Add(new DataPoint(10, 40)); 
     s1.Points.Add(new DataPoint(40, 20)); 
     s1.Points.Add(new DataPoint(60, 30)); 
     mo.Series.Add(s1); 
     MyModel = mo; 
    } 

    PlotModel _myModel; 
    public PlotModel MyModel 
    { 
     get { return _myModel; } 
     set { SetProperty(ref _myModel, value); } 
    } 
} 

देखें/लेआउट

<oxyplot.xamarin.android.PlotView 
    android:id="@+id/plot" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

टुकड़ा/कोड के पीछे

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    var ignored = base.OnCreateView(inflater, container, savedInstanceState); 
    var view = this.BindingInflate(Resource.Layout.MyView, null); 

    var graphControl = view.FindViewById<PlotView>(Resource.Id.plot); 

    var bindset = this.CreateBindingSet<MyView, MyViewModel>(); 
    bindset.Bind(graphControl).For(c => c.Model).To(vm => vm.MyModel); 
    bindset.Apply(); 

    return view; 
} 

दृष्टिकोण 2: XML बाइडिंग

ViewModel ऊपर

देखें/लेआउट

०१२३५१६४१०६ रूप

ही

<oxyplot.xamarin.android.PlotView 
    android:id="@+id/plot" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    local:MvxBind="Model MyModel"/> 

टुकड़ा/कोड के पीछे

कोई बाध्यकारी कोड की जरूरत है, सिर्फ बाध्यकारी inflater के माध्यम से लेआउट को चलाने के लिए सुनिश्चित करें।

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    var ignored = base.OnCreateView(inflater, container, savedInstanceState); 
    return this.BindingInflate(Resource.Layout.MyView, null); 
} 
+1

@PlaceHolder, ' hotspring

+0

@ हॉटस्पिंग, आप 100% सही हैं, मैंने गायब ग्राफकंट्रोल 'FindById' – Plac3Hold3r

+0

जोड़ा था चार्ट के अमान्यता के लिए कस्टम बाइंडिंग सोच रहा था, क्योंकि मुझे यकीन नहीं था कि ऑक्सीप्लॉट इसे कैसे संभालता है। लेकिन अच्छा! – Cyriac

संबंधित मुद्दे