我在这个viewmodel中有其他绑定正常工作。我不知道为什么这个不是。我尝试了许多不同的方法来更新图像源绑定。一切都失败了。这是我见过的最常见的方式,这就是我在Windows Phone上的方式。我不确定为什么这不适用于WPF。
XAML
<ComboBox
ItemsSource="{Binding Keywords}"
SelectedItem="{Binding SelectedKeyword, Mode=TwoWay}">
<ComboBox.ItemTemplate>
<DataTemplate>
<Label Width="280" Content="{Binding KeywordName}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<Grid>
<Image Source="{Binding LinkedImage}"/>
</Grid>
viewmodel
public KeywordObject SelectedKeyword
{
get { return _SelectedKeyword; }
set { _SelectedKeyword = value; OnPropertyChanged("LinkedImage"); }
}
public Boolean _IsLinked
{
get { return _SelectedKeyword.KeywordNumber.Length > 0; }
}
public ImageSource LinkedImage
{
get
{
return _IsLinked ?
new BitmapImage(new Uri("/images/checked.png", UriKind.RelativeOrAbsolute))
:
new BitmapImage(new Uri("/images/unchecked.png", UriKind.RelativeOrAbsolute));
}
}
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string prop)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
这是在debuger中输出的例外
A first chance exception of type 'System.IO.IOException' occurred in PresentationFramework.dll
A first chance exception of type 'System.IO.IOException' occurred in PresentationCore.dll
答案 0 :(得分:0)
答案最终是路径需要pack://application:,,,/Specific.Project.Name;component
以下是回答它的SO文章的链接
Image shows up in Visual Studio designer but not during run-time
这是最终结果的样子
<image Source="pack://application:,,,/Specific.Project.Name;component/images/checked.png"/>
我也可以将它注入绑定中,并且工作正常。