1
私は次のviewmodelを持っています。私はSubmitOrderコマンドに対してcanSubmit observableを使用します。 QuantityプロパティはTextBoxのtextプロパティにバインドされます。そして、テキストボックスにテキストを入力すると、observable canSubmitトリガされず、コマンドが有効になります。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>
は、あなたが共有することはでき は、ここに私のviewmodelですあなたとあなたのバインディングはビュー側からですか? –