我试图找到一个简单的例子,其中枚举按原样显示.我见过的所有示例都尝试添加漂亮的显示字符串,但我不希望这种复杂性.
基本上我有一个类,它包含我绑定的所有属性,首先将DataContext设置为此类,然后在xaml文件中指定这样的绑定:
<ComboBox ItemsSource="{Binding Path=EffectStyle}"/>
Run Code Online (Sandbox Code Playgroud)
但是这并没有在ComboBox
as项中显示枚举值.
我正在尝试创建一个WPF MarkupExtension类,它从我的文本翻译类提供翻译文本.翻译的东西效果很好,但需要使用文本键进行静态方法调用以返回翻译的文本.像这样:
ImportLabel.Text = Translator.Translate("import files");
// will be "Dateien importieren" in de or "Import files" in en
Run Code Online (Sandbox Code Playgroud)
它的特点是它接受计数值以提供更好的措辞.
ImportLabel.Text = Translator.Translate("import n files", FileCount);
// will be "Import 7 files" or "Import 1 file"
Run Code Online (Sandbox Code Playgroud)
另一个例子:如果事情还需要4分钟,那么它只需要一分钟即可.如果文本键"minutes"被定义为任何数字的"Minuten"而计数为1的"Minute",则以下方法调用将返回要使用的右词:
Translator.Translate("minutes", numberOfMinutes)
// will be "minute" if it's 1, and "minutes" for anything else
Run Code Online (Sandbox Code Playgroud)
现在在WPF应用程序中,有很多XAML代码,其中包含大量文字文本.为了能够翻译它们而不必坚持,我需要一个标记扩展,我可以传递我的文本键,并将在运行时返回翻译的文本.这部分相当容易.创建一个继承自MarkupExtension的类,添加一个接受文本键作为参数的构造函数,将其存储在私有字段中,并让其ProvideValue方法返回存储键的翻译文本.
我真正的问题是:如何使我的标记扩展接受计数值,使其受数据限制,并且当计数值发生变化时,翻译文本将相应地更新?
它应该像这样使用:
<TextBlock Text="{t:Translate 'import files', {Binding FileCount}}"/>
Run Code Online (Sandbox Code Playgroud)
每当FileCount的绑定值发生更改时,TextBlock都必须接收新的文本值以反映更改,并仍然提供良好的措辞.
我在那里找到了一个类似的解决方案:http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/10/30/wpf-localization-on-the-fly-language-selection. aspx但是,尽管我努力遵循它,但我无法理解它的作用或为什么它会起作用.似乎所有事情都发生在WPF中,提供的代码只会将其推向正确的方向,但目前还不清楚如何.我不能让我适应它做任何有用的事情.
我不确定在运行时让翻译语言发生变化是否有用.我想我需要另一级别的绑定.为了保持低复杂性,我不打算在基本版本工作之前这样做.
目前没有代码可以告诉你.它只是处于一种可怕的状态,它唯一能做的就是抛出异常,或者不翻译任何东西.任何简单的例子都非常受欢迎(如果在这种情况下存在这样的事情).
简而言之(?),我有一个ListView
(目标)单向绑定到一个XmlDataProvider
(源)双向绑定到一个TextBox
(目标)使用标准 XAML 进行控件绑定和自定义 XAML 扩展用于绑定到XmlDataProvider
. 这对应用程序来说很方便,因为在应用XmlDataProvider
程序运行后从用户输入动态加载...
无论如何,在运行时,修改TextBox.Text
属性后,IMultiValueConverter.ConvertBack(...)
调用该方法将更新从该目标传播回源。但是,因为XmlDataProvider
对象不是 a DependencyProperty
,所以更新不会从更改的XmlDataProvider
源进一步传播到ListView
目标的另一个绑定。
如果没有重新架构(您可以合理地建议),我需要通知 WPFXmlDataProvider
需要更新任何将此作为源的目标。我希望维护一个通用的、可重用的绑定类,并且到目前为止,我已经享受了我的主要 XAML 解决方案的低编码负担。
目前,我拥有的唯一访问背后的代码来自IMultiValueConverter.ConvertBack(...)
方法内部。在此方法中,我确实可以访问<-->链接的Binding
对象。如果我能得到的对象然后我可以打这个电话来完成更新传播,...XmlDataProvider
TextBox
BindingExpression
Binding.Source
BindingExpression.UpdateTarget()
但是,我不知道如何BindingExpression
从Binding.Source
与 a 无关的对象中获取a DependencyProperty
。
在此先感谢您的建议和帮助。