我正在开发一个 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 属性,因为创建用户控件时数据上下文为空。
以下代码导致 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 上的模型中提出属性更改时,转换器和图像的来源不会改变。
这就是我试图用转换器实现的目标:当类别是当前的时候,图像的来源应该是一个本地值,而当类别不是当前的时候,图像的源应该是另一个值。我正在尝试使用依赖属性并引发更改事件,以便在类别“当前”状态更改时自动更改。我在互联网上搜索并且在我不明白的情况下它应该可以工作,但我肯定做错了什么,因为它不起作用。非常感谢任何帮助。
谢谢,卡塔林
编辑:
好的,所以我做了一个绑定反射器,现在转换器参数是绑定的。但问题是它不是实时更新的。
我在每个项目中有一个枢轴和一个用户控件,其中包含很多图像。为了减少内存使用,我制作了这个转换器,让它只显示当前数据透视项目的图像。但是,当类别的绑定布尔值设置为 true 时,图像的源现在会更新,除非我重新加载页面。尽管当前类别的 source 和 bool 这两个属性的更改是相互反映的。