C# WPF/MVVM-从XAML初始化图像并绑定到ViewModel中的属性
我有一个用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?如果要在设计
<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}}" />