2014-01-19 3 views
3

В WPF я начал использовать ReactiveUI, и это вопрос, который пришел ко мне, можно было бы сосредоточить внимание на определенном контроле с помощью моего MainViewModel, можно ли также использовать условия?Фокус на управлении с помощью ReactiveUI?

Примеры приветствуются, спасибо.

+1

Вы можете использовать прикрепленные свойства для управления фокусом с модели. См. Здесь, например: http://stackoverflow.com/a/1356781/1001985 – McGarnagle

+0

Прилагаемые свойства? Валовой. –

ответ

0

Вот ReactiveUI способ сделать это (так как этот вопрос является довольно расплывчатым, вот общий ответ)

public class MainViewModel 
{ 
    public ReactiveCommand Focusify { get; set; } 

    public MainViewModel() 
    { 
     Focusify = new ReactiveCommand(); 
    } 
} 

public class MainView : UserControl, IViewFor<MainViewModel> 
{ 
    public MainView() 
    { 
     this.WhenAnyObservable(x => x.ViewModel.Focusify) 
      .Subscribe(_ => someControl.Focus()); 
    } 
} 
+0

Спасибо, Пол и МакГарнагл приложил свойства, решит мою проблему. Я просто подумал, что с ReactiveUI нужно сделать что-то вроде MVVMLight, когда мы отправляем сообщение, которое вы можете контролировать, получать его в режиме просмотра. –

0

воску вопрос покажет мой ответ. Я использовал приложенные свойства, которые имеют поведение, которое я хотел.

MainView.xaml

<TextBox x:Name="txtUser" helper:FocusExtension.IsFocused="{Binding Path=IsUserFocus,Mode=TwoWay}" Text="{Binding Path=User,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
          Margin="5" Width="400" HorizontalAlignment="Left" FontSize="14" controls:TextboxHelper.Watermark="User"/> 

MainViewModel.cs

public MainViewModel() 
    { 

     this.WhenAny(vm => vm.IsUserFocus, x => false).Throttle(TimeSpan.FromSeconds(2)).Subscribe(x => 
     { 
      IsUserFocus = true; 
     });   

    } 

Я использовал таймер, потому что, когда мой запуск приложения, он выполняет анимацию, если установить фокус, прежде чем она заканчивается стиль курсора, который белый не будет работать, он будет иметь нормальный цвет, черный.

спасибо!