2017-04-08 3 views
1

を構築リリースでは動作しませんバインディング。ここでReactiveUIは、私がReactiveUIとの奇妙な問題を打つとデバッグの微細結合作品がリリースビルドではないの構築が、どこ結合していUWPアプリで

私はこの問題を示すサンプルアプリのコードを持っています。デバッグビルドでは、テキストボックスに何かを入力すると、ビューモデルのInputTextプロパティがそれに応じて更新され、ボタンをタップすると、更新された入力テキストがメッセージダイアログに表示されます。 InputTextは常に空のままなので、リリースビルドの同じコードは機能しません。

誰もがここで何が起こっているか知っていますか?

<Page x:Class="RxBind.MainPage" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <StackPanel> 
     <TextBox x:Name="MyTextBox" Margin="10"/> 
     <Button x:Name="MyButton" Content="Show Dialog" Margin="10"/> 
    </StackPanel> 
</Page> 



public sealed partial class MainPage : IViewFor<MainPageViewModel> 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 

     ViewModel = new MainPageViewModel(); 

     this.WhenActivated(d => 
     { 
      d(this.BindCommand(ViewModel, vm => vm.MyButtonCommand, v => v.MyButton)); 
      d(this.Bind(ViewModel, vm => vm.InputText, x => x.MyTextBox.Text)); 
     }); 
    } 

    #region IViewFor impl 

    object IViewFor.ViewModel 
    { 
     get { return ViewModel; } 
     set { ViewModel = (MainPageViewModel)value; } 
    } 

    public MainPageViewModel ViewModel { get; set; } 

    #endregion //IViewFor impl 
} 



public class MainPageViewModel : ReactiveObject 
{ 
    private string _inputText = string.Empty; 
    public string InputText 
    { 
     get { return _inputText; } 
     set { this.RaiseAndSetIfChanged(ref _inputText, value); } 
    } 

    public ReactiveCommand<Unit, Unit> MyButtonCommand { get; } 

    public MainPageViewModel() 
    { 
     MyButtonCommand = ReactiveCommand.CreateFromTask(async() => 
     { 
      await new MessageDialog($"InputText={InputText}").ShowAsync(); 
     }); 
    } 
} 
+0

@Sunteen Wu、あなたは実際に上記を試して、それが再生するには不十分であるという結論に達しましたか?上記のコードは、文字通り私のサンプルプロジェクトでコーディングしたもので、一行も抜けていない*すべて*です。 –

+0

最新のUWPおよび.NETネイティブツールでも問題を再現できます。それはhttps://github.com/reactiveui/ReactiveUI/issues/1330に似ていますが、私も追いかけて行きたいと思っています。ディスカッションに参加したり、[email protected]で電子メールを送信したりできます。おそらく、私が掘り起こすには1日か2日かかります。 –

+0

申し訳ありませんが、私のせいです。テスト時に 'ReactiveUI'サードパーティパッケージを見逃しました。削除されました。 –

答えて

0

マットWhildenがthis threadで述べたように、ランタイムディレクティブのアプローチを使用すると、私は正しい答えとしてこれをマーキングしています問題を解決します。多くのありがとうMatt Whilden。

1

これは「何ここで起こっている」本当にあなたの質問への答えではありませんが、私は他のバグマットWhildenがにリンクされていると私はで当分の間、それを中心に働いたことを提出男ですボタンイベントのテキストを参照して、そこからコマンドを呼び出すあまりにも代わりのボタンにコマンドを直接結合、ソートのこのような:

d(Observable.FromEventPattern<RoutedEventHandler, object, RoutedEventArgs>(h => MyButton.Click += h, h => MyButton.Click -= h).Subscribe(x=> 
{ 
    ViewModel.InputText = MyTextBox.Text; 
    ViewModel.MyButtonCommand.Execute(null); 
})); 

ないエレガントが、私は本当に必要としないので、それは私のために動作します変更されたプロパティを更新する - ボタンをクリックするだけです。問題が解決する前にこれもあなたのために働くでしょう。

+0

Executeのnullは偽ですが、これは報告された問題を回避します。私は掘り続けます。私の調査ノートはGitHubスレッドにあります。 –

関連する問題