【发布时间】:2012-09-09 16:26:56
【问题描述】:
我最近开始试验 DataBinding 并为我的自定义类实现 DependencyProperties。这一切都很好,而且可能性令人兴奋,但是,我遇到了一个可能只能通过稍微修改整体类设计来解决的问题。而且我想确保这是唯一的选择,而且我没有遗漏任何东西。
因此,我的类存储有关用户导入应用程序的视频文件的信息。在其他属性中,它包含:
public class VideoFile {
public string FilePath { get; protected set; }
public uint ID { get; protected set; ]
public string Extension { get { return Path.GetExtension(FilePath); } }
public string FileName { get { return Path.GetFilename(FilePath); } }
}
所以,我已经成功地将 FilePath 替换为 DependencyProperty。但是,在 UI 中,我主要只想显示文件名,它使用一些逻辑来提供其值。据我所知,这是我的选择:
- 我可以简单地为 FileName 和 Extension 创建 DependencyProperties,并在构造函数中设置它们的值,但这是多余的;我已经在 FilePath 中拥有该信息,因此我想避免使用此选项。
- 创建 ValueConverters,一个用于显示文件名,一个用于显示扩展名,并在我的绑定中使用它们。
我只是简单地遇到了 ValueConverters,所以我不确定。我可以将它们用于此目的吗?或者,我是否刚刚遇到了它们存在的主要原因之一? :)
最后但并非最不重要的一点是,当 ValueConverter 不是正确的方法时,谁能想到类似的情况?我想避免直接跳入它们,只是意识到它不起作用,因为“那个”属性不能以这种方式表达。
【问题讨论】:
-
为什么要将这些转换为
DependencyProperty?我会从发布的代码中怀疑您不需要。 -
@DanPuzey 因为我想在 UI 中显示它们。更具体地说,一个列表框,其中每个项目代表此类的一个实例。带有缩略图、文件名、以 MB 为单位的大小和以秒为单位的持续时间。虽然这些属性预计不会改变,但我想在不同的地方显示它们,我厌倦了编写 for 循环和在代码中创建控件。我想要一个漂亮、干净的 XAML 和一个摇摆不定的 DataTemplate :)
-
您不需要
DependencyProperty就可以在 UI 中显示它们。事实上,我建议您应该避免这种不必要的开销。 (请参阅我的答案以获取替代方案。)
标签: c# .net wpf data-binding dependency-properties