【发布时间】:2015-07-15 07:54:11
【问题描述】:
我有一个带有 Image 组件的表单。我想在运行时加载图像。 在我的 ViewModel 中,我有一个代表图像源路径的属性:
public string ImagePath { get; set; }
此属性绑定到我的 ImageComponent 的 Source。 问题是,当我启动我的应用程序时,ImagePath 为空,默认转换器尝试将 ImagePath 转换为 System.Windows.Media.ImageSource 并引发异常。
我想到了 3 个解决方案:
- 创建一个自定义转换器(当字符串为空时可以提供默认的 ImageSource)
- 阻止视图获取 ImagePath(不知道如何)
- 使用 System.Windows.Media.ImageSource 而不是字符串。 (不确定 MVVM 模式是否实现,因为 System.Windows.Media 仅由视图使用)
所以我的问题是:哪个解决方案更好(不仅是我的 3 个),实施方案是什么?
XAML 绑定:
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Image Name="image" Stretch="Uniform" Source="{Binding Main.ImagePath, Mode=OneWay, Source={StaticResource Locator}}" />
</ScrollViewer>
引发的异常:
System.Windows.Data Error: 23 : Cannot convert '' from type 'String' to type 'System.Windows.Media.ImageSource' for 'en-US' culture with default conversions;
【问题讨论】:
-
你能添加你在 XAML 中使用的 Control + Binding 吗?
-
我编辑了我的问题,谢谢
-
嗯,很奇怪,无论我是否将 ImagePath 设置为
null、""、有效或无效路径,我都不会收到该错误...可能是因为我不使用 ViewModelLocator ,我也试试 -
确定是
null吗?它看起来像一个空的string(""),这可能解释了为什么 @Staeff 无法复制。 -
他们都失败了,我尝试了""后null引发了我一个异常