【发布时间】:2010-09-20 19:24:32
【问题描述】:
我正在开发一个使用格式丰富的 ListBox 的应用程序。我需要做的一件事是将多条信息绑定到一个按钮,该按钮位于 ListBox 的 DataTemplate 中。
这是我为帮助您理解问题而编写的实际代码的过度简化。
这是来自 DataTemplate 内部的一段 XAML 的工作原理:
<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); }
}
}
忽略这样一个事实,在这种情况下,我可以简单地传递对数据对象本身的引用(在我的实际应用程序中,我需要从一对嵌套的ListBoxs 中提取数据,但问题是一样的) ,任何人都可以看到这里发生了什么吗?我的依赖属性没有正确声明吗?我需要对绑定做一些奇怪的事情吗?
【问题讨论】:
-
非常令人费解。帮助我找出绑定问题的一件事是启用 Debug -> Exceptions -> Managed Debugging Assistants -> BindingFailure 下的 throwed 选项。如果您这样做,调试器可能会告诉您一些有用的信息。
-
我启用了该功能,但它没有报告任何额外内容。它一定是别的东西。
标签: c# wpf xaml datatemplate