从列表中设置WPF图像源<基于组合框选择
本文关键字:于组合 组合 选择 列表 设置 WPF 图像 | 更新日期: 2023-09-27 18:17:23
我有一个SearchResponse类返回到我的viewmodel。
public class SearchResponse
{
public ICollection<SearchResult> Results { get; private set; }
public string OriginalSearchTerm { get; private set; }
public TimeSpan TimeTaken { get; private set; }
public SearchResponse(ICollection<SearchResult> results, string originalSearchTerm, TimeSpan timeTaken)
{
Results = results;
OriginalSearchTerm = originalSearchTerm;
TimeTaken = timeTaken;
}
}
列表框绑定到SearchResponse.Results
,每个项包含缩略图的图像。SearchResult
看起来像这样:
public class SearchResult
{
public string Title { get; set; }
public string Description { get; set; }
public string Path { get; set; }
public ICollection<ThumbnailImage> ThumbnailPaths { get; set; }
public SearchResult()
{
}
public SearchResult(string title, string description, string path, ICollection<ThumbnailImage> thumbnailPaths)
{
Title = title;
Description = description;
Path = path;
ThumbnailPaths = thumbnailPaths;
}
}
这里是ThumbnailImage
(ThumbnailSize是一个enum):
public class ThumbnailImage
{
public int Id { get; set; }
public ThumbnailSize ThumbnailSize { get; set; }
public string Path { get; set; }
public ThumbnailImage()
{
}
public ThumbnailImage(ThumbnailSize thumbnailSize, string path)
{
ThumbnailSize = thumbnailSize;
Path = path;
}
}
最后,我将一个ComboBox绑定到缩略图大小的枚举,目的是当用户选择一个大小时,搜索结果中的缩略图图像立即相应地改变。因此,当发生这种情况时,我需要查询ICollection<ThumbnailImage>
以获取正确的文件路径,更新图像宽度和高度(每个缩略图大小的固定宽度/高度)并将更改应用于整个结果列表。
<ComboBox DockPanel.Dock="Right"
ItemsSource="{Binding Source={StaticResource ThumbnailSizesFromEnum}}"
SelectedItem="{Binding CurrentThumbnailSize}">
</ComboBox>
我有一个工作绑定CurrentThumbnail
属性,如上所示。
谁能建议最好的(或至少是好的)方法来处理这个问题?目前我只是因为阅读太多而头痛,试图找到一个解决方案。我想知道我是否应该使用命令,值转换器或StyleTrigger,但无论哪种方式,我真的需要一些指针。
谢谢。
我有一些困难以下项目的层次结构,你正在显示,但我相信你正在寻找的答案很简单:你必须实现INotifyPropertyChanged
接口上的类(或类),包含属性,你将改变响应在CurrentThumbnail
的变化。正如我对您的问题的理解,当当前选择的大小发生变化时,您并不怀疑如何更新缩略图数据,您只是想知道如何将您已更改数据的事实传达给数据绑定。这就是INotifiyPropertyChanged
的作用
例如,这个版本的ThumbnailImage
将把Path
属性的变化通知到绑定到Path
的任何XAML属性:
public class ThumbnailImage : INotifyPropertyChanged
{
private string _path;
public string Path
{
get { return _path; }
set
{
if (value != _path)
{
_path = value;
if (PropertyChanged != null)
{
var args = new PropertyChangedEventArgs("Path");
PropertyChanged(this, args);
}
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
我还建议您确保用于表示所显示的数据的类的层次结构(所有这些类本质上都是视图模型的一部分)应该与XAML的层次结构匹配。很难说,因为您没有给我们完整的XAML布局,但我怀疑您的数据模型可能太复杂了。换句话说,考虑平坦化数据树。