Я работаю над приложением, которое использует богато отформатированный ListBox.Одна из вещей, которые мне нужны, - привязать несколько фрагментов информации к кнопке, которая находится в DataTemplate ListBox.
Это чрезмерное упрощение моего реального кода, который я сделал, чтобы помочь вам понять проблему.
Вот фрагмент XAML внутри DataTemplate, который работает:
<Button Command="local:MediaCommands.StreamVideo"
CommandParameter="{Binding Path=Folder}" />
Когда я нажимаю кнопку, он отправляет свойство Folder
элемента данных, на котором основан этот список (член ItemsSource
, который показывает текущий элемент списка).Однако мне нужен еще один фрагмент данных, свойство Filename
текущего элемента.Для этого я создал новый класс FileInfo
, который содержит свойства зависимостей для Folder
и Filename
.Затем я заменил код XAML ранее на:
<Button Command="local:MediaCommands.StreamVideo">
<Button.CommandParameter>
<data:FileInfo Folder="{Binding Path=Folder}"
Filename="{Binding Path=Filename}" />
</Button.CommandParameter>
</Button>
Однако, единственное, что мой код посылает мне, это пустой FileInfo
объект.Обратите внимание, что если я изменю приведенный выше XAML для включения буквальных значений для Folder
и Filename
, код будет работать нормально в том смысле, что он правильно создает объект FileInfo
и назначает правильные свойства.
Для справки мой класс FileInfo
выглядит примерно так:
class FileInfo : DependencyObject {
public static readonly DependencyProperty FolderProperty;
public static readonly DependencyProperty FilenameProperty;
static FileInfo() {
FolderProperty = DependencyProperty.Register("Folder",
typeof(string), typeof(FileInfo));
FilenameProperty = DependencyProperty.Register("Filename",
typeof(string), typeof(FileInfo));
}
public string Folder {
get { return (string) GetValue(FolderProperty); }
set { SetValue(FolderProperty, value); }
}
public string Filename {
get { return (string) GetValue(FilenameProperty); }
set { SetValue(FilenameProperty, value); }
}
}
Игнорируя тот факт, что в этом случае я мог бы просто передать ссылку на сам объект данных (в моем реальном приложении янужно извлечь данные из пары вложенных ListBox
с, но проблема та же), кто-нибудь может увидеть, что здесь происходит?Мои свойства зависимостей не были объявлены должным образом?Нужно ли делать что-то необычное с привязками?