2017-04-08 2 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 Native 도구에서도 문제를 재현 할 수 있습니다. 그것은 https://github.com/reactiveui/ReactiveUI/issues/1330과 유사합니다. 나는이 문제에 관심이 있습니다. 토론에 참여하거나 [email protected]으로 전자 메일을 보내주십시오. 나를 파헤 치기까지 하루 이틀이 걸릴 것입니다. –

+0

죄송합니다. 내 잘못입니다. 테스트 할 때'ReactiveUI' 제 3 자 패키지를 놓치 셨습니다. 삭제되었습니다. –

답변

0

Matt 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 스레드에 있습니다. –

관련 문제