具有DependencyProperty的图像源转换器

时间:2013-08-09 09:35:29

标签: xaml binding windows-phone-8 converter dependency-properties

我正在开发一个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();
        }
    }

问题是我无法在XAML中绑定转换器的isCurrent属性,因为在创建usercontrol时datacontext为null。

以下代码导致XAML异常:

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

所以我试图在datacontext存在的时候在代码中设置绑定:

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时,图像的源现在更新,除非我重新加载页面。虽然对当前类别的两个属性,源和布尔的更改相互反映。

0 个答案:

没有答案