C# WPF/MVVM-从XAML初始化图像并绑定到ViewModel中的属性

C# WPF/MVVM-从XAML初始化图像并绑定到ViewModel中的属性,c#,wpf,xaml,mvvm,data-binding,C#,Wpf,Xaml,Mvvm,Data Binding,我有一个用WPF MVVM编写的应用程序。 我想从XAML初始化一个嵌入式图像(这样我就可以在设计器中看到它),但也要将它绑定到ViewModel,这样我就可以从代码中进行操作。 我可以这样成功地初始化它: <Image x:Name="Image1" Source="pack://application:,,,/images/image1.png" Height="200" Width="55" Opacity="0.35"> 如何将其绑定到ViewModel?如果要在设计

我有一个用WPF MVVM编写的应用程序。 我想从XAML初始化一个嵌入式图像(这样我就可以在设计器中看到它),但也要将它绑定到ViewModel,这样我就可以从代码中进行操作。 我可以这样成功地初始化它:

<Image x:Name="Image1" Source="pack://application:,,,/images/image1.png" Height="200" Width="55"  Opacity="0.35">


如何将其绑定到ViewModel?

如果要在设计时查看某些数据,可以定义DesignTime ViewModel

<Window
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=designTimeViewModels:DesignViewModel,
                                                       IsDesignTimeCreatable=True}"
/>

从本主题:

您可以使用FallbackValue

    <BitmapImage x:Key="Image1" UriSource="pack://application:,,,/images/image1.png" />

    <Image x:Name="Image1" Source={Binding Image1, FallbackValue={StaticResource Image1}}" />


@VM中图像对象的Timbooo操作违反了MVVM的基本原则。您应该在视图中执行此操作(代码隐藏)。使用事件从视图中的VM触发某些操作。如果您正在使用MVVM light或PRISM中的EventAggregator,请使用Messenger。在VM代码中注册事件并在视图中订阅(代码隐藏)。但别忘了注销它,以避免内存泄漏;)我知道这一点我将代码隐藏得非常精简,我只声明绑定ViewModel的构造函数。我的视图绑定在ViewModel中,我将业务逻辑保留在模型中。我正在寻找某种方法将ViewModel中的图像属性绑定到视图中的图像,而不是将字符串属性绑定到图像的源属性。也许这是不可能的?
public string DisplayedImagePath 
{
    get { return "/AssemblyName;component/Images/ImageName.jpg"; }
}
    <BitmapImage x:Key="Image1" UriSource="pack://application:,,,/images/image1.png" />

    <Image x:Name="Image1" Source={Binding Image1, FallbackValue={StaticResource Image1}}" />