我正在研究本地化问题的解决方案。这不是正常的语言本地化。

<Label Content="{Binding myDictionary[A Test], FallbackValue=A Test}"/>


实际上,以上代码在视图模型中调用了Dictionary,该声明为

public Dictionary<string, string> myDictionary


问题是我必须在标签中两次定义字符串“ A Test”。
一次是在绑定中的索引中,一次是在FallbackValue中。

我最终想要的是看起来像这样的东西...

<Label Content="{Binding myDictionary[A Test]}"/>


目前,当我执行此操作时,发生的情况是Visual Studio中的Xaml设计器无法解析myDictionary(因为它不知道数据上下文,因此无法连接到定义它的viewmodel),这意味着标签将显示为空白,不会使视觉设计更加困难。

我已经研究过调用静态方法,但是要使myDictionary正常运行,需要在视图模型中实例化该方法。

有没有一种方法可以使索引值“ A Test”显示在设计器中而不必使用后备值?

目的是如果myDictionary[A Test]中的值被更新,则能够刷新内容(实际上myDictionary是可观察的)

最佳答案

因为它不知道数据上下文,所以无法连接到定义它的viewmodel


并非如此。...可以通过在页面的元数据属性中指定设计时上下文来使用设计时上下文:

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
d:DataContext="{d:DesignInstance {x:Type viewModels:MainVM}}"


通过这样做,您可以设置仅设计时词典来使用。



在MSDN杂志上阅读以下内容:

MVVM - Maximizing the Visual Designer’s Usage with Design-Time Data

请注意,仍然可以在非Blend编辑器(例如Visual Studio)中使用Blend名称空间。否则,不要害怕根据需要使用/学习Blend。



如果从实际VM中获取真实数据,则在设计模式下最好忽略某些可能导致问题的对象/动作。这是一项检查,以确定该动作是否处于设计模式,如果不是,则执行该块,否则将忽略该动作,因为它处于设计模式。

if (!DesignerProperties.GetIsInDesignMode(this))

10-08 14:08