Я хотел использовать привязку данных с ToolBarTray, поэтому я создал несколько сервисов и привязал свойства для полного удовлетворения моих потребностей.Окончательное решение было следующим:
<ToolBarTray local:TrayBinding.ItemsSource="{Binding Path=Groups}"
local:TrayBinding.ToolBarItemsSource="Items"></ToolBarTray>
Где ItemsSource ссылается на коллекцию, используемую для создания панелей инструментов, а ToolBarItemsSource ссылается на свойство элемента, привязанного к панели инструментов, которое будет использоваться в качестве ItemsSource на панели инструментов.,Теперь все работает нормально, но прежде чем я спрыгну и введу это в рабочий код, я хочу убедиться, что я не делаю глупостей.
Итак, логика работает следующим образом: класс TrayBinding инициализируетКласс ToolBarTrayBinder (это класс, который выполняет фактическую работу по созданию панелей инструментов в трее и поддерживает их синхронизацию с коллекцией с привязкой к данным) и назначает его для ToolBarTray, для которого определены привязанные свойства.Так как мне нужно сохранить отображение между каждым ToolBarTray и его соответствующим ToolBarTrayBinder, я решил добавить ToolBarTrayBinder в качестве свойства зависимостей на ToolBarTray.Ниже вы можете увидеть логику инициализации в классе TrayBindig:
private static void InitializeBinder(ToolBarTray tray)
{
string toolsItemsSource = GetToolBarItemsSource(tray);
IEnumerable dataSource = GetItemsSource(tray);
if (string.IsNullOrEmpty(toolsItemsSource) || dataSource == null)
return;
var toolBarTrayBinder = tray.GetValue(BindingServiceProperty) as ToolBarTrayBinder;
if (toolBarTrayBinder == null)
{
toolBarTrayBinder = new ToolBarTrayBinder(tray);
tray.SetValue(BindingServiceProperty, toolBarTrayBinder);
}
toolBarTrayBinder.ItemsSource = toolsItemsSource;
toolBarTrayBinder.DataSource = dataSource;
}
И ToolBarTrayBinder хранится в частном свойстве зависимости:
private static readonly DependencyProperty BindingServiceProperty = DependencyProperty.Register("TrayBinder",
typeof(ToolBarTrayBinder),
typeof(ToolBarTray),
new PropertyMetadata(null));
Итак, мой вопрос: считается ли онКак добавить вспомогательные классы, такие как ToolBarTrayBinder, в качестве свойства зависимости для элемента, к которому присоединено свойство?Есть ли какие-либо проблемы, такие как утечки памяти или аналогичные, которые могут вызвать проблемы при этом?