gpt4 book ai didi

c# - 本地化绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 16:49:25 25 4
gpt4 key购买 nike

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

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

实际上,上面的代码调用了 View 模型中的 Dictionary,声明为

public Dictionary<string, string> myDictionary

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

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

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

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

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

有没有一种方法可以在设计器中显示索引值“A Test”而无需使用回退值?

目标是当 myDictionary[A Test] 中的值更新时能够刷新内容(实际上 myDictionary 是可观察的)

最佳答案

as it won't know the datacontext so can't hook up to the viewmodel where it's defined

不是这样......可以通过在页面的元数据属性中指定它来使用仅设计时的上下文,例如:

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,在设计模式下最好忽略可能导致问题的某些对象/操作。这是一个检查以确定操作是否处于设计模式,如果不是则执行 block ,否则将被忽略,因为它处于设计模式。

if (!DesignerProperties.GetIsInDesignMode(this))

关于c# - 本地化绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36728030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com