【发布时间】:2016-05-25 19:21:53
【问题描述】:
我现在花了一些时间试图解决这个问题,但我仍然坚持下去。我有一个带有 MVVM 模式的 WPF 应用程序。在我的 ViewModel 中,我有三种情况:
-
X needs Y和Y is available -
X needs Y和Y is not available X doesn't need Y
我正在尝试根据这些条件在我的视图上设置一个图像图标(如复选标记、感叹号……随便什么)。
在 ViewModel 中: 我创建了我的属性。在任何 GUI 更改时,我都会根据上述情况设置变量,类似于以下内容:
void MyBigFunctionToSetAllProperties()
{
// other cases
// ..
if (NeedsY && YExists)
{
// properties
StatusIconPath = "@\"/Resources/SessionView/X-With-Green-Check-White.png\"";
ResultIconPath = "@\"/Resources/SessionView/Y-White.png\"";
}
}
在 View.Cs 中:我实际上什么也没做。
在 View.xaml: 我这样绑定:
<StackPanel>
<Image Source="{Binding StatusIconPath} />
</StackPanel>
我仍然不明白为什么它不起作用。我错过了什么?请和谢谢。
按照建议将属性直接与 Xaml 绑定是行不通的。我是这样尝试的:
VM:示例属性:
public BitmapImage VerificationStatusIcon{ get { return new BitmapImage(new Uri(@VerificationStatusIconPath, UriKind.Relative));}}
查看 Xaml:
<Image Name="verificationStatusImage" Source="{Binding VerificationStatusIcon}" Margin="5,0" Width="40" Height="40"/>
【问题讨论】:
-
您的视图模型类是否实现了
INotifyPropertyChanged,StatusIconPath的 Setter 是否正确提升了PropertyChanged? -
@brad 我对 textBlock 绑定使用相同的描述例程并且它正在工作,它只是不适用于图像。你能看看OP编辑吗?谢谢
-
当绑定发生时,您是否在 Visual Studio 的“输出”窗口中看到任何绑定错误?我还将验证图像实际上是否作为资源正确嵌入,并且您使用的资源路径是否正确。有时这些在 WPF 中看起来很奇怪。
-
有关如何在 WPF 中通过路径引用资源的一些示例,请参见此页面。 msdn.microsoft.com/en-us/library/aa970069(v=vs.100).aspx 您最终可能会得到一条类似于
pack://application:,,,/ResourceFile.png的路径 -
@brad 我添加了我的输出。有趣,谢谢。我正在挖掘更多