【问题标题】:Different behavior of Windows Store and WPF app designers for the same view model相同视图模型的 Windows 应用商店和 WPF 应用程序设计器的不同行为
【发布时间】:2013-03-31 21:35:21
【问题描述】:

我正在使用 MVVP 模式在 Windows Store(又名 Metro)和 WPF 应用程序之间共享大部分代码。其中一个控件的可见性由视图模型成员的状态控制:

Visibility="{Binding Path=IsServiceSelected, 
            Mode=TwoWay, 
            Converter={StaticResource BoolToVisibility}}" 

属性“IsServiceSelected”在数据上下文后面的视图模型上定义。我有一个假的视图模型,其中包含一些仅供设计师使用的数据。这个假模型中的属性 IsServiceSelected 被评估为“true”(这个属性没有成员字段,它是根据其他数据计算的)。这适用于 WPF 应用程序,我看到控件的可见性是可见的。但对于 Windows 应用商店应用,控件的可见性始终在设计时折叠,只有在运行时才会正确评估。

如果我使用 ConverterParameter=True 扩展 XAML 定义,则会显示控件,因此显然“IsServiceSelected”的值未正确评估。但奇怪的是,我为我的模型、视图模型和特定的假视图模型共享相同的代码(在可移植类库中),因此它应该在不同平台上被评估为相同的值。但事实并非如此。

UPDATE 误报,问题出在我的代码上。固定。

【问题讨论】:

  • 如何设置控件所在页面的DataContext
  • DataContext 的设置方式与 WPF 和 Store 应用程序相同,使用 d:DataContext={d:DesignInstance Type=fakemodeltype 等...}

标签: wpf xaml winrt-xaml designer


【解决方案1】:

不同的行为可能是由转换器引起的,因为设置 ConverterParameter=True 使其也可以在 Windows 应用商店应用程序中工作。您显然不能在 WPF 和 Windows 应用商店应用程序中使用相同的转换器,因为它们必须实现不同的接口。

比较这两种实现,您应该能够发现差异。对于 Windows 应用商店应用程序实施,特别检查如何使用 Convert 方法的 parameter 参数。将其设置为true 似乎会更改返回值。

【讨论】:

  • 嗯,在我的情况下,如果我设置 ConverterParameter=False,它就可以工作。显然是没有设置 IsServiceSelected 属性,我只需要弄清楚为什么它在 WPF 案例中的相同代码中设置(我不重用转换器而是重用视图模型)。
  • @VagifAbilov 在运行时它工作正常,即使没有设置ConverterParameter
  • 是的 Damir,在运行时它可以在没有参数的情况下正常工作,在设计时它只适用于 WPF (.NET 4.5) 应用程序,但不适用于 Windows 商店。
  • @VagifAbilov 我很想看到一个小样本来重现这个问题。
  • 感谢您的帮助,我将尝试提取小代码部分并发布它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多