Тотальный новичок в WPF, так что терпите меня.
Прежде чем приступить к работе, я строю приложение для проверки концепции. Я решил попробовать WPF.
Это сценарий:
У меня есть:
- a View = CustomerView (userControl с кнопкой «Купить продукты»)
- текстовое поле (добавить все действия, которые происходят)
- ViewModel = CustomerViewModel (общается со службой и т. Д. И получает результаты
- Модель = Клиент (простой класс со свойствами со встроенным InotifyPropertyChanged
Учитывая, что у меня есть коллекция продуктов, и для каждого продукта, который я покупаю, мне нужно ПРИЛОЖИТЬ ТЕКСТ К TXTBox в userControl, распечатывая все происходящие действия, textBox должен выглядеть как
Start buying .....
Product 1 Sold
Product 2 Sold
Fineshed....
Моя проблема в том, что, несмотря на то, что я успешно уведомляю после продажи каждого предмета, я не могу понять, как я могу связать или сделать "Товар 1 продан, товар 2 появляется в текстовом поле.
В окнах форм у меня будет userControl со свойством ProductStatus и всякий раз, когда я получаю уведомление, я добавляю текст в textBox.
«Я помещаю beginInvoke, когда получаю операцию threadCross» при входе из службы. Это еще одна проблема, которую мне придется исследовать
private ProductStatus _productStatus;
public ProductStatus Status
{
get { return _productStatus; }
set
{
_printStatus = value;
BeginInvoke((MethodInvoker)(() => txtProductResult.AppendText(string.Format("Product Sold {0}", Environment.NewLine))));
}
}
Как добавить текст в myTextBox для каждого предмета, который я продаю?
================= Добавлен текущий код =========================== ====
void LogChanged(object sender, NotifyCollectionChangedEventArgs e)
{
foreach(object item in e.NewItems)
{
txtProduct.AppendText(item.ToString());
}
}
<TextBox Margin="12,41,12,59" Name="txtPrintResult" />
<TextBox Text="{Binding TicketPrintLog, Mode=OneWay}" Margin="12,41,12,12" />
ProductModel
=============
public string ProductLog{ get; set; }
ProductViewModel
==================
public string ProductLog
{
get { return _ProductModel.ProductLog; }
}
internal void AppendToProductLogText(string text)
{
_ProductModel.ProductLog += text + Environment.NewLine;
OnPropertyChanged("ProductLog");
}
void ProductSoldNotificationReceived(object sender, notificationEventArgs e)
{
//THIS FIRES WHENEVER I PRODUCT IS SOLD.
AppendToProductLogText(e.Message);
}
ProductView (userControl) XAML
================================
<TextBox Margin="12,41,12,59" Name="txtResult" Text="{Binding ProductLog, Mode=OneWay}" />
IN CODE BEHIND I DO
public void Action1()
{
txtResult.AppendText(_productViewModel.ProductLog);
}
public void SellProductAction()
{
txtResult.AppendText(_productViewModel.ProductLog);
}
У меня проблема в том, что мне все еще нужно это сделать
txtResult.AppendText(_productViewModel.ProductLog);
, который лишает смысла привязку данных и при выполнении действия SellproductAction. Я получаю уведомление только о последнем товаре, он не добавляет проданный Product1, проданный Product 2 и т. Д.
Любые идеи