Я сейчас пытаюсь разработать небольшое финансовое приложение.Моему приложению нужен довольно сложный графический интерфейс (в основном таблица с динамическими строками и столбцами, а также категориями и подкатегориями);поскольку я не мог придумать стандартный xaml-способ достижения этого, я пишу собственный элемент управления, который должен отображать мои данные.
Короче говоря, я создаю много разныхЭлементы пользовательского интерфейса WPF непосредственно в C #, а не в XAML.Теперь мне понадобится способ синхронизировать некоторые значения этих компонентов с динамически изменяющимися данными.Очевидным примером является то, что некоторые из моих текстовых полей (или ярлыки или что-то еще) должны будут отображать цену акции.Таким образом, он должен быть связан с другим классом, который предоставляет актуальные цены.
Моя главная проблема заключается в том, что я заранее не знаю, какие цены понадобятся и где они должны отображаться.Так что мне в основном нужно, чтобы текстовое поле связалось с моим ценовым объектом и спросило: «Эй, мне понадобится цена для акции US0123456789. Пожалуйста, скажите мне эту цену и продолжайте обновлять мою стоимость всякий раз, когда ценаэтот запас обновляется. "
Все примеры привязки данных, которые я обнаружил, обычно были сосредоточены на привязке к переменным в конкретном экземпляре объекта, но я не могу просто привязать, скажем, PriceObject.Price, потому что не могубыть простой переменной "Price".В конце концов, существуют различные акции, управляемые объектом цены, и каждому текстовому полю нужна цена только одной конкретной акции, поэтому ему нужно будет привязать что-то вроде PriceObject.PriceForStock ("US0123456789").Однако я не мог найти способ привязки к методу, и я не знаю, как еще это было бы возможно.
Единственный способ, которым я мог придумать, - это иметь словарь в моемISIN-классы GUI-класса в качестве ключей и ссылка на элемент пользовательского интерфейса в качестве значения.Тогда мой графический интерфейс мог наблюдать объект цены и каждый раз, когда изменялись цены, и вызывалось событие, и класс графического интерфейса мог обновлять элемент интерфейса вручную, что-то вроде (входящий псевдокод):
private Dictionary<string, UIElement> displayed_stocks = new Dictionary<string, UIElement>();
private void create_gui()
{
Textbox textbox = new Textbox();
displayed_stocks.Add(isin, textbox);
}
private void receive_change_event_of_price_object(string affected_isin, double new_price)
{
displayed_stocks[affected_isin].Text = new_price.ToString();
}
Но я неНе знаю, я чувствую, что это небрежное решение.Тем более, что мне понадобятся не только динамические цены, но и другая динамическая информация, например информация о портфелях, которая будет зависеть не только от ISIN, но и от ISIN и идентификатора портфеля, поэтому со словарем все будет не так просто.Есть ли лучший способ сделать это?Я был бы рад, что меня подтолкнули в правильном направлении!Спасибо