人们在 Windows 8 中使用啥来代替 IMultiValueConverters?

Posted

技术标签:

【中文标题】人们在 Windows 8 中使用啥来代替 IMultiValueConverters?【英文标题】:What are people using instead of IMultiValueConverters in Windows 8?人们在 Windows 8 中使用什么来代替 IMultiValueConverters? 【发布时间】:2013-07-01 22:55:18 【问题描述】:

我正在将现有 WPF 应用程序移植到 Windows 8 应用程序。

在 WPF 应用程序中,我们大量使用 MultiValue 转换器来允许我们创建由 UI 元素属性和视图模型属性(河马对象的权重和项目控件的实际宽度)组合而成的值,以实现良好的 UI 效果。

但是,Windows 8 没有多值转换器。

由于我正在移植一个应用程序,我真的不想显着更改我的视图模型或 Xaml。

如何以最少的痛苦和重写来复制多值控制器功能?

【问题讨论】:

I'm porting an existing WPF application to a Windows 8 application. - 我真的为你感到难过。到目前为止,WinRT XAML 功能集甚至不如 Silverlight 功能集。这意味着它只是完整 WPF 功能集的一小部分。这意味着您将不得不求助于各种可怕的黑客来使其正常工作。 WinRT 是新的 CompactFramework,它拥有一切,除了............一切 我用脏话代替。很多:-) 作为一种解决方法,您可以考虑使用此答案中描述的方法 - ***.com/questions/20229214/… @Sevenate 这看起来很有用,谢谢。如果我回到 WinRT 领域,我会试一试。 【参考方案1】:

我的方法是公开 VM 的静态单例实例;例如:

public class MainViewModel : INotifyPropertyChanged

    private static MainViewModel _mvm;
    public static MainViewModel MVM
    
        get
        
            if (_mvm == null)
                _mvm = new MainViewModel();

            return _mvm;
        
    

然后简单地通过整个虚拟机:

<Button Command="Binding MyCommand" CommandParameter="Binding MVM">Run Command</Button>        

它不是多重绑定,但它确实允许您传递多个参数。

【讨论】:

问题不在于如何将视图模型传递给转换器。它将视图模型和视图属性传递给转换器。 (哦,您似乎根本没有使用转换器,这令人困惑,因为问题是关于转换器的)。 答案是WinRT不支持。我只是想我会提供另一种方法。

以上是关于人们在 Windows 8 中使用啥来代替 IMultiValueConverters?的主要内容,如果未能解决你的问题,请参考以下文章

在 CSS3 中使用啥来代替 CONTAINS()

我可以在 Swift 中使用啥来代替“for”

在 iOS7 中,我应该使用啥来代替已弃用的 GKLeaderboardViewController?

我应该在 Math.max(...arr) 中使用啥来代替 Chrome 的扩展运算符?

在从 C++ 转换为 C# 的代码中,我应该使用啥来代替 memcpy?

用啥来代替 JavaScript 中的类? [复制]