0

私のプロジェクトでは、ユーザーがサブフォルダーと画像 (MVVM とモデルを介して設定) を持つ ImageCollections を表示できるビューがあります。私が実装したかった機能の 1 つは、まだ表示されていない次の画像が表示される小さな画像ホルダーです。以下の ImageCollection モデルで設定しましたが、うまく動作しますが、リアルタイムで更新されません。

つまり、表示されている画像をクリックしても、ShowNextToWatchImage 画像はビューで自動的に更新されません (アプリを終了して再起動するか、フォルダーを再度開くと、正しい新しい画像が表示されます)。

どうすればこれを修正できますか?

モデルでは:

public Image ShowNextToWatchImage
        {
            get
            {
                var found = false;
                Image nextToWatchImage = null;
                foreach (var folder in Folders)
                {
                    foreach (var image in folder.Images)
                    {
                        if (!image.ImageHasBeenViewed)
                        {
                            nextToWatchImage = image;
                            found = true;
                            break;
                        }
                        nextToWatchImage = image;
                    }
                    if (found)
                    {
                        break;
                    }
                }
                return nextToWatchImage;
            }
            set
            {
                _showNextToWatchImage = value;
                NotifyOfPropertyChange(() => ShowNextToWatchImage);
        }
    }

編集:

シェリダンの答えを実装しようとした後、私は何も与えない(または少なくともそのアイテムのビューに何も表示しない)次のものを持っています(何らかの方法でバルジングしたと確信しています)。

public class Collection : PropertyChangedBase
    {
        private Image _showNextToWatchImage;

        public Collection()
        {
            Folders = new List<Folder>();
        }

        public Image ShowNextToWatchImage
        {
            get { return _showNextToWatchImage; }
            set
            {
                _showNextToWatchImage = value;
                UpdateNextToWatchImage();
                NotifyOfPropertyChange(() => ShowNextToWatchImage);
            }
        }

        public void UpdateNextToWatchImage()
        {
            var found = false;
            Image nextToWatchImage = null;
            foreach (var folder in Folders)
            {
                foreach (var image in folder.Images)
                {
                    if (!image.ImageHasBeenViewed)
                    {
                        nextToWatchImage = image;
                        found = true;
                        break;
                    }
                    nextToWatchImage = image;
                }
                if (found)
                {
                    break;
                }
            }
            ShowNextToWatchImage = nextToWatchImage;
        }

        public List<Folder> Folders { get; set; }
    }
4

2 に答える 2

0

XAML でバインドを設定mode=TwoWayしましたか? だから:{Binding ShowNextToWatchImage, Mode=TwoWay}

于 2013-10-03T11:21:54.950 に答える