Привязка данных с параметрами - PullRequest
0 голосов
/ 18 августа 2011

Я сейчас пытаюсь разработать небольшое финансовое приложение.Моему приложению нужен довольно сложный графический интерфейс (в основном таблица с динамическими строками и столбцами, а также категориями и подкатегориями);поскольку я не мог придумать стандартный 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 и идентификатора портфеля, поэтому со словарем все будет не так просто.Есть ли лучший способ сделать это?Я был бы рад, что меня подтолкнули в правильном направлении!Спасибо

Ответы [ 2 ]

1 голос
/ 18 августа 2011

Если вы создадите индексатор для объекта, с которым вы связываетесь, вы можете легко и просто связать его с параметром, см. эту ссылку для получения дополнительной информации.

0 голосов
/ 18 августа 2011

Динамические привязки достигаются с помощью ...

  1. Indexer, как Бас уже говорил выше.Даже ToString() может сделать тоже самое.
  2. MultiBinding с IMultiValueConverter, решающим, какие источники привязки должны вступить в силу.MultiBinding имеет преимущество, заключающееся в том, что вы можете связать все возможные вещи, которые могут быть отображены в вашем TextBox, и отправить их в конвертер (независимо от того, доступен он или нет), и тогда конвертер решит, какой из них вылепить и отобразить.последовательность приоритетов исходных значений фиксирована, тогда вы можете использовать PriorityBinding.Нет необходимости в преобразователе, описанном выше.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...