在我的WPF应用程序中,我正在动态创建jpeg文件。它们被保存在bin / Debug或bin / Release中。
我有一个数据绑定WrapPanel
,其图像控件正在使用ValueConverter
,如下所示:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return new Uri(value.ToString(), UriKind.RelativeOrAbsolute);
}
值的示例值是Images\400\26.jpg
,我假设默认情况下在bin \ Debug或bin \ Release中查找。
我的问题是,我似乎无法将图像控件数据绑定到动态创建的jpeg。但是我可以将其标记为Include
且其BuildAction
为Content
的其他jpeg数据绑定。
如何数据绑定到编译时不存在的动态创建的图像?
答案 0 :(得分:4)
您可以创建图像路径的集合,并在每个新创建的图像路径中添加它。现在你可以将你的wrappanel绑定到这个集合了。
您可以在ViewModel类中实现此集合,然后将此ViewModel类作为您的DataContext,并使用您的转换器将您的wrapPanel绑定到该集合。
编辑:这是一个示例文件:
MainWindowViewModel.cs:
using System;
using System.ComponentModel;
using System.Collections.ObjectModel;
namespace wpfJpegBindingSample
{
class MainWindowViewModel : INotifyPropertyChanged
{
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
// Create the OnPropertyChanged method to raise the event
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
#endregion
//constructor
public MainWindowViewModel()
{
m_imagesList = new ObservableCollection<Uri>();
}
//collection of images' Uris
private ObservableCollection<Uri> m_imagesList;
//property for the collection (so you can bind to it)
public ObservableCollection<Uri> ImagesList
{
get
{
return m_imagesList;
}
}
//an Add method that update the bindings
public void Add(Uri uri)
{
ImagesList.Add(uri);
OnPropertyChanged("ImagesList");
}
}
}
MainWindow.xaml.cs:
using System.Windows;
namespace wpfJpegBindingSample
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = m_viewModel = new MainWindowViewModel();
}
private MainWindowViewModel m_viewModel;
}
}
MainWindow.xaml:
<Window x:Class="wpfJpegBindingSample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ListView ItemsSource="{Binding ImagesList}">
<ListView.ItemTemplate>
<DataTemplate>
<WrapPanel>
<Image Source="{Binding}"/>
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Window>
如您所见,在视图模型中,我们定义了Uris图像的集合。 在后面的主窗口代码中,我们将该视图模型的对象设置为我们的窗口数据上下文,并且在xaml中,我们将listView(或您选择的任何其他控件)的Item源设置为绑定属性ImagesList,在我们的数据中上下文是视图模型。
最后,我们可以修改动态jpeg创建器功能:
private void dynamicallyJpegCreator(string newImagePath)
{
// Creating Image code
// .....
// Create new image at newImagePath
m_viewModel.Add(new System.Uri(newImagePath, System.UriKind.RelativeOrAbsolute));
}
此时,您将获得列表视图显示动态创建的图像列表