1

私は WP8 MVVM アプリに取り組んでいますが、バインディングの問題で立ち往生しています。

私はこのXAMLコードを持っています:

<UserControl.Resources>
<local:CurrentCategorySourceConverter x:Key="CurrentCategorySourceConverter"/>
</UserControl.Resources>

<Image Grid.RowSpan="2"
       Name="MovieThumbnail" 
       Stretch="Fill"
       Width="130" Height="195"
       HorizontalAlignment="Center"
       VerticalAlignment="Center">
       <Image.Source>
             <BitmapImage UriSource="{Binding Path=Image120x170,Converter={StaticResource CurrentCategorySourceConverter}}"
                          CreateOptions="BackgroundCreation"/>
       </Image.Source>
</Image>

私のコンバーター:

public class CurrentCategorySourceConverter : DependencyObject, IValueConverter
    {
        public bool isCurrent
        {
            get { return (bool)GetValue(CurrentCategoryProperty); }
            set { SetValue(CurrentCategoryProperty, value); }
        }

        public static DependencyProperty CurrentCategoryProperty =
            DependencyProperty.Register("isCurrent",
                                        typeof(bool),
                                        typeof(CurrentCategorySourceConverter),
                                        new PropertyMetadata(null));

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value != null && isCurrent == true)
            {
                return value;
            }
            else
            {
                return null;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

問題は、ユーザー コントロールの作成時にデータ コンテキストが null であるため、XAML でコンバーターの isCurrent プロパティをバインドできないことです。

次のコードでは、XAML 例外が発生します。

<UserControl.Resources>
<local:CurrentCategorySourceConverter x:Key="CurrentCategorySourceConverter"
                                      isCurrent="{Binding currentCategory}"/>
</UserControl.Resources>

だから私はデータコンテキストが存在するときにコードでバインディングを設定しようとしています:

this.model = this.DataContext as CategoryPageContentViewModelApp;
converter = this.Resources["CurrentCategorySourceConverter"] as CurrentCategorySourceConverter;
Binding binding = new Binding();
binding.Source = this.model;
binding.Path = new PropertyPath("currentCategory");
BindingOperations.SetBinding(converter,CurrentCategorySourceConverter.CurrentCategoryProperty, binding);

問題は、currentCategory のモデルからプロパティの変更を発生させたときに、コンバーターと画像のソースが変更されないことです。

これは私がコンバーターで達成しようとしているものです: 画像のソースは、カテゴリが現在のものである場合はローカル値であり、カテゴリが現在のものでない場合は別の値である必要があります。依存関係プロパティを使用して変更イベントを発生させ、カテゴリの「現在の」状態が変更されたときに自動的に変更されるようにしようとしています。私はインターネットで検索しましたが、私の理解ではうまくいくはずですが、うまくいかないので何か間違っていることは確かです。どんな助けでも大歓迎です。

ありがとう、カタリン

編集:

わかりましたので、バインディング リフレクターを作成しました。これで、コンバーター パラメーターがバインディングされます。しかし、それはリアルタイムで更新されていないということです。

ピボットと、多くの画像を含む各アイテムのユーザー コントロールがあります。メモリ使用量を減らすために、このコンバーターを作成して、現在のピボット アイテムの画像のみを表示するようにしました。ただし、カテゴリのバインドされた bool が true に設定されている場合、ページをリロードしない限り、画像のソースが更新されるようになりました。現在のカテゴリの source と bool の 2 つのプロパティへの変更は相互に反映されます。

4

0 に答える 0