1

我有一个 ViewModel,其中包含一个布尔属性,它告诉您用户是否已通过身份验证。

我有一个 WrapPanel,它绑定到一组配置文件。这些配置文件的 DataTemplate 有一个图标 - 用户未通过身份验证时的闭合挂锁和用户通过身份验证时打开的挂锁。理想情况下,这些将绑定到 ViewModel 上的布尔值,但模板的 DataContext 是单独的配置文件对象。

我努力了,

  • 按此处指定Source的方式在绑定中设置选择器,尽管 Windows Phone 7 似乎不支持x:Reference
  • 我还尝试了此处详述的控制反转(?)方法(但containerLocator在我的对象上找不到)
  • 我尝试应用 aStyle.Trigger但这些在 Windows Phone 7 中不受支持
  • 我还尝试访问后面代码中的 XAML 元素并以编程方式更新事件触发器,但是我无法处理ImageDataTemplate 中的元素
4

2 回答 2

0

评论后编辑:WP7 不支持样式触发器。但是,如果有人在以下版本中寻找这个答案,我会在下面回复:

我会使用这里Style Trigger看到的来动态更新图标属性 - 作为你的风格的一部分,这样你就可以掌握你的.SourceDataTemplateImage

于 2013-02-25T21:33:40.320 回答
0

我发现的一种方法是基于Damian Antonowicz 的回答,但没有实现他使用的完全反转控制方法,如下所示,

在您的视图模型命名空间下创建一个解析为您的视图模型实例的部分类,例如

public partial class ViewModelInstanceLocator
{
    public AppViewModel AppViewModel // Or whatever the type of your view-model is ...
    {
        get 
        { 
            return App.VM; // Or wherever your view model instance is ...
        }
    }
}

在您的 XAML 页面中将类的另一半定义为资源,以便可以将其称为静态资源,我在我的文件中App.xaml这样做,以便可以在任何地方引用它,

<ResourceDictionary>
    <viewmodel:ViewModelInstanceLocator x:Key="ViewModelInstanceLocator" />
    ...
</ResourceDictionary>

如果还没有对您的视图模型命名空间的引用,您可能需要包含相关的命名空间,例如在顶部,

    xmlns:viewmodel="clr-namespace:MyAppNamespace.ViewModel"

最后绑定到视图模型如下,

{Binding AppViewModel.SomeProperty, Source={StaticResource ViewModelInstanceLocator}}

绑定像往常一样更新,就像通过 DataContext 引用了视图模型实例一样。但是,它不适用于设计时数据

于 2013-02-26T12:35:01.987 回答