public OrderDetailsViewModel(IAccountPositionService accountPositionService, IOrdersService ordersService) { this.accountPositionService = accountPositionService; this.ordersService = ordersService; this.transactionInfo = new TransactionInfo(); //use localizable enum descriptions this.AvailableOrderTypes = new ValueDescriptionList<OrderType> { new ValueDescription<OrderType>(OrderType.Limit, Resources.OrderType_Limit), new ValueDescription<OrderType>(OrderType.Market, Resources.OrderType_Market), new ValueDescription<OrderType>(OrderType.Stop, Resources.OrderType_Stop) }; this.AvailableTimesInForce = new ValueDescriptionList<TimeInForce> { new ValueDescription<TimeInForce>(TimeInForce.EndOfDay, Resources.TimeInForce_EndOfDay), new ValueDescription<TimeInForce>(TimeInForce.ThirtyDays, Resources.TimeInForce_ThirtyDays) }; this.SubmitCommand = new DelegateCommand<object>(this.Submit, this.CanSubmit); this.CancelCommand = new DelegateCommand<object>(this.Cancel); this.SetInitialValidState(); }
public OrderDetailsPresentationModel(IOrderDetailsView view, IAccountPositionService accountPositionService, IOrdersService ordersService) { View = view; this.accountPositionService = accountPositionService; this.ordersService = ordersService; _transactionInfo = new TransactionInfo(); //use localizable enum descriptions AvailableOrderTypes = new List<ValueDescription<OrderType>> { new ValueDescription<OrderType>(OrderType.Limit, Resources.OrderType_Limit), new ValueDescription<OrderType>(OrderType.Market, Resources.OrderType_Market), new ValueDescription<OrderType>(OrderType.Stop, Resources.OrderType_Stop) }; AvailableTimesInForce = new List<ValueDescription<TimeInForce>> { new ValueDescription<TimeInForce>(TimeInForce.EndOfDay, Resources.TimeInForce_EndOfDay), new ValueDescription<TimeInForce>(TimeInForce.ThirtyDays, Resources.TimeInForce_ThirtyDays) }; View.Model = this; ValidateModel(); SubmitCommand = new DelegateCommand<object>(Submit, CanSubmit); CancelCommand = new DelegateCommand<object>(Cancel); SubmitCommand.IsActive = view.IsActive; CancelCommand.IsActive = view.IsActive; view.IsActiveChanged += view_IsActiveChanged; }
partial void SetTransactionInfo(TransactionInfo transactionInfo) { //This instance of TransactionInfo acts as a "shared model" between this view and the order details view. //The scenario says that these 2 views are decoupled, so they don't share the presentation model, they are only tied //with this TransactionInfo this.orderDetailsViewModel.TransactionInfo = transactionInfo; this.HeaderInfo = transactionInfo.TickerSymbol; }
partial void SetTransactionInfo(TransactionInfo transactionInfo) { //This instance of TransactionInfo acts as a "shared model" between this view and the order details view. //The scenario says that these 2 views are decoupled, so they don't share the view model, they are only tied //with this TransactionInfo this.orderDetailsViewModel.TransactionInfo = transactionInfo; //Bind the CompositeOrderView header to a string representation of the TransactionInfo shared instance (we expect the details view model to modify it from user interaction). MultiBinding binding = new MultiBinding(); binding.Bindings.Add(new Binding("TransactionType") { Source = transactionInfo }); binding.Bindings.Add(new Binding("TickerSymbol") { Source = transactionInfo }); binding.Converter = new OrderHeaderConverter(); BindingOperations.SetBinding(this, HeaderInfoProperty, binding); }
public void VerifyTransactionInfoModificationsInOrderDetails() { var orderDetailsViewModel = new OrderDetailsViewModel(new MockAccountPositionService(), null); var transactionInfo = new TransactionInfo { TickerSymbol = "Fund0", TransactionType = TransactionType.Buy }; orderDetailsViewModel.TransactionInfo = transactionInfo; orderDetailsViewModel.TransactionType = TransactionType.Sell; Assert.AreEqual(TransactionType.Sell, transactionInfo.TransactionType); orderDetailsViewModel.TickerSymbol = "Fund1"; Assert.AreEqual("Fund1", transactionInfo.TickerSymbol); }