1
我有下一個viewmodel,我使用canSubmit可觀察SubmitOrder命令。 數量屬性綁定到TextBox的文本屬性。當我在TextBox中輸入一些文本時,它不會觸發canSubmit observable,並且命令仍然處於啓用狀態。 這裏是我的視圖模型:ReactiveCommand與Int32屬性上執行CanExecute
public class CreateOrderViewModel : ReactiveObject
{
private int _quantity;
public int Quantity
{
get { return _quantity; }
set { this.RaiseAndSetIfChanged(ref _quantity, value); }
}
private ISymbol _selectedSymbol;
public ISymbol SelectedSymbol
{
get { return _selectedSymbol; }
set { this.RaiseAndSetIfChanged(ref _selectedSymbol, value); }
}
private BuySell _side;
public BuySell Side
{
get { return _side; }
set { this.RaiseAndSetIfChanged(ref _side, value); }
}
public ReactiveCommand<Unit, IOrderProcessor> SubmitOrder { get; }
public CreateOrderViewModel(IOrderService orderService)
{
var canSubmit = this.WhenAnyValue(v => v.SelectedSymbol, v => v.Quantity,
(symbol, quantity) => symbol != null && quantity > 0);
SubmitOrder = ReactiveCommand.Create(
() => orderService.SubmitOrder(CreateOrderFromParameters()),
canSubmit);
}
private Order CreateOrderFromParameters()
{
return new Order
{
Quantity = Quantity,
Symbol = SelectedSymbol,
Side = Side
};
}
}
我的XAML:
<TextBlock Grid.Row="0" Grid.Column="0"
Text="{x:Static properties1:Resources.Quantity}"
/>
<TextBox Grid.Row="0" Grid.Column="1"
Text="{Binding Quantity, UpdateSourceTrigger=PropertyChanged}"
/>
<TextBlock Grid.Row="0" Grid.Column="2"
Text="{x:Static properties1:Resources.Symbol}"
/>
<ComboBox Grid.Row="0" Grid.Column="3"
ItemsSource="{Binding Symbols}"
DisplayMemberPath="Ticker"
SelectedItem="{Binding SelectedSymbol}"
/>
<StackPanel Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="6"
HorizontalAlignment="Left">
<Button Content="{x:Static properties1:Resources.Submit}"
Command="{Binding SubmitOrder}"
/>
</StackPanel>
你能分享和你從視角看你的約束力? –