0

我有一个返回到我的视图模型的 SearchResponse 类。

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 是一个枚举):

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;
    }
}

最后,我有一个绑定到缩略图大小枚举的组合框,目的是当用户选择一个大小时,搜索结果中的缩略图图像会立即相应地发生变化。因此,当发生这种情况时,我需要查询ICollection<ThumbnailImage>正确的文件路径,更新图像宽度和高度(每个缩略图大小的固定宽度/高度)并将更改应用于整个结果列表。

<ComboBox DockPanel.Dock="Right"
                  ItemsSource="{Binding Source={StaticResource ThumbnailSizesFromEnum}}"
                  SelectedItem="{Binding CurrentThumbnailSize}">
        </ComboBox>

CurrentThumbnail如上所示,我有一个有效的绑定属性。

任何人都可以提出最好的(或至少是好的)方法来解决这个问题。目前,我只是在阅读太多试图找到解决方案时感到头疼。我想知道我是否应该使用命令、值转换器或 StyleTrigger,但无论哪种方式我都需要一些指针。

谢谢。

4

1 回答 1

2

我在遵循您正在显示的项目的层次结构时遇到了一些困难,但我相信您正在寻找的答案很简单:您必须INotifyPropertyChanged在包含您将要更改的属性的类(或多个类)上实现接口以响应CurrentThumbnail. 据我了解您的问题,您对如何在当前选择的大小更改时更新缩略图数据毫无疑问,您只是想知道如何电报您已将数据更改为数据绑定的事实。这INotifiyPropertyChanged就是为了。

例如,此版本的ThumbnailImagewill 将属性中的更改电报Path到绑定到的任何 XAML 属性Path

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 布局,但我怀疑您的数据模型可能过于复杂。换句话说,考虑扁平化你的数据树。

于 2013-06-07T05:30:48.213 回答