2016-09-20 7 views
1

こんにちはXamarin/MvvmCross開発者、MvvmCrossバインディングの変更

これは好奇心からの単なる質問です。私が開発しているアプリケーションの1つで、いくつかの動作が変更されました。具体的には、UISwitchの "On"値をViewModelのブール値にバインドするときに、iOS上で実行されます。バインディングが適用されたときにプロパティのgetterが起動され、スイッチが反転されたときにsetterが起動されますが、UIに反映されません。 (値を反映するために、スイッチのUIを取得する)また、その下に以下を追加する必要がちょうど

var set = this.CreateBindingSet<SettingsView, SettingsViewModel>(); 
set.Bind(PushNotificationSwitch).For(s => s.On) 
    .To(vm => vm.ReceivePushNotifications); 
set.Apply(); 

から行くために

var settingsViewModel = ((SettingsViewModel)ViewModel); 
PushNotificationSwitch.On = settingsViewModel.ReceivePushNotifications; 

私を強制私は結合を残しただけでなく、 UIの状態を反映するための新しいコードは、正しい状態を反映したUIだけでなく、ユーザーが自分の設定を変更したときにその状態を変更するサービスです。

最近MacでXamarin Studioからアップグレードしましたが、私のiOS Xamバージョンはバージョン10.0.0.6です。残念ながら、アップグレードしたバージョンは確認していませんでしたが、利用可能なバージョンがあるとすぐにアップグレードするので、以前の安定バージョンにする必要があります。

私の質問は以下のとおりです。

  • は、あなたがたのうち、バインディングがこの方法で変更同様の問題を経験していますか?
  • Androidバインディングが正常に動作するため、MvvmCross、またはiOS Xamarinの変更の問題だとお考えですか?
  • 何が原因である可能性がありますか?これが影響を与えると思われる他の部分はありませんので、もし存在しなければバグを探す必要はありません。コマンド、テキスト、およびカスタムコントロールのバインディングが正常に動作しています(私がテストした限り)

この質問が他の場所に適している場合は、私にこの動作について興味があります。我々はOPのコメントで働いたようスイッチのイベントが出てリンクされた

おかげ

+0

この動作は、デバッグビルドとリリースビルドの両方に表示されますか、またはそのいずれか一方のみに表示されますか?それはコードを削除しているリンカである可能性があります。 LinkerPleaseIncludeファイルにスイッチ用のコードがありますか? – Cheesebaron

+0

@Cheesebaronこれは、デバッグとリリースの両方で発生し、私はLinkerPleaseIncludeファイルのスイッチ用のコードを持っていません。 –

+0

次のように追加できますか? 'public void Include(UISwitch sw) { sw.On =!sw.On; sw.ValueChanged + =(送信者、引数)=> {sw。On = false; }; } ' – Cheesebaron

答えて

3

。したがって、バインディングは何もしませんでした。

public void Include(UISwitch sw) 
{ 
    sw.On = !sw.On; 
    sw.ValueChanged += (sender, args) => 
    { 
     sw.On = false; 
    }; 
} 

この意志を:これを解決するために

最も簡単な方法は、MvvmCrossスタートアップNuGetおよびVisual StudioとXamarin Studioの利用可能なテンプレートを通じて提供し、あなたのLinkerPleaseInclude.csファイルに次のコードを追加することですLinkerPleaseIncludeクラスはPreserve属性を使用するため、ValueChangedイベントとOnプロパティの両方を直接使用することをLinkerに伝えます。

関連する問題