2016-12-19 16 views
0

MvxFragmentから継承するFragmentクラスがあります。 このクラスは、リソースからフラグメントビューを取り出し、メインビューで展開します。 サブビューへのMVVMCrossバインドプロパティandroid

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

      var chargeList = view.FindViewById<MvxListView>(Resource.Id.ControlChargeListView); 
      chargeList.Divider = null; 
      chargeList.Adapter = new MvxListElementAdapter(container.Context, (IMvxAndroidBindingContext)BindingContext, Mvx.GetSingleton<IThemeService>().ThemeViewControlChargeRecordListElement, typeof(ControlChargeRecordListElement)); 

      return view; 
     } 

この

は私ControlFragmentView.axml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:local="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <MyApp.Droid.Controls.Control.ControlIndicator 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     local:MvxBind="ChargeValue ChargeValue;" 
     /> 
</LinearLayout> 

ですこれはこれは私のMyApp.Droid.Controls.Control.ControlIndicatorクラスです

public class ControlViewModel : MvxViewModel 
{ 
    private float _chargeValue; 
     public float ChargeValue 
     { 
      get { return _chargeValue; } 
      set 
      { 
       _chargeValue = value; 
       RaisePropertyChanged(() => ChargeValue); 
      } 
     } 
} 

私のViewModelにある

public class ControlIndicator : FrameLayout 
{ 
    private float _chargeValue; 
    public float ChargeValue 
    { 
     get { return _chargeValue; } 
     set 
     { 
      _chargeValue = value; 
     } 
    } 

    public ControlChargeIndicator(Context context, IAttributeSet attrs) 
      : base(context) 
    { 
     Initialize(); 
    } 

    private function Initialize() 
    { 
     var bar = new ControlBar(Context); 
     AddView(bar); 

     var bar2 = new ControlBar(Context); 
     AddView(bar2); 

     .... 

     var barN = new ControlBar(Context); 
     AddView(barN); 
    } 
} 

これは私のControですlBarクラス

public class ControlBar : FrameLayout 
{ 
    private float _chargeValue; 
    public float ChargeValue 
    { 
     get { return _chargeValue; } 
     set 
     { 
      _chargeValue = value; 
     } 
    } 
} 

ChargeValueが変更されたことをControlBarサブビューに認識させるにはどうすればよいですか? ControlIndicatorクラスでChargeValueが変更されたときにControlBarクラスでは検出されません。どうすれば達成できますか?

答えて

0

ControlIndicatorクラスのChargeValueプロパティは、ControlBarChargeValueに接続していません。なぜあなたはこの種の巣作りをしていますか?

は変更してみてください:

private float _chargeValue; 
public float ChargeValue 
{ 
    get { return _chargeValue; } 
    set 
    { 
     _chargeValue = value; 
    } 
} 

へ:

public float ChargeValue 
{ 
    get { return _bar.ChargeValue; } 
    set 
    { 
     _bar.ChargeValue = value; 
    } 
} 

確認_barは、メンバ変数としてControlBarのインスタンスであることを確認してください。

+0

あなたは正しいです。しかし、いくつかのControlBarコンポーネントがあれば、どのように管理しますか?上記の私の更新された質問を見てください。 – gianis6

+0

それぞれのプロパティを公開します。 – Cheesebaron

+0

作成できないControlBarコンポーネントの正確な数がわからないため、できません。 – gianis6

関連する問題