使用C#和XAML在Windowsapp store应用中绑定资源文件值字符串
我有资源文件:Strings en-US Resources.resw
我正试图从这个文件绑定到一个字符串,如下所示:
我想这种方法是错误的,因为我得到“资源’TestString’无法解决。”
如何从资源文件绑定到字符串?
PS:我在资源文件中有TestString。
PPS:我需要使用Studio 2012而不是Windows 8.1应用程序创建Windows 8商店应用程序。
您可以使用Windows Phone项目中的相同文件,但首先,您应该将本地化移动到PCL – 可移植类库。 在这种情况下,您将以与Windows Phone中相同的方式使用本地化。 请阅读本教程 – 这一点都不难。
有一个工具 – PublicResXFileCodeGenerator
,您可以使用它来访问资源文件值:
MyResourceFile.ResourceString;
您可以将该值存储到属性中,然后在UI上将其绑定。
编辑绑定方法
您将需要一个ViewModel,它将被设置为该View上的DataContext
。
假设您的资源文件中有三行包含值: FirstName,LastName和Age 。 因此,您将访问它们,如:
string firstName = MyResourceFile.FirstName; string lastName = MyResourceFile.LastName; int age = Convert.ToInt32(MyResourceFile.Age); //made it an int
您将必须创建一个将作为ViewModel的类。
public class MyViewModelClass : INotifyPropertyChanged { private string firstName; public string FirstName { get { return firstName; } set { firstName = value; OnPropertyChanged(); } } private string lastName; public string LastName { get { return lastName; } set { lastName = value; OnPropertyChanged(); } } private string age; public string Age { get { return age; } set { age= value; OnPropertyChanged(); } } //Also the INotifyProperty members ... }
然后在相应的View代码隐藏.cs文件中:
1)定义并声明MyViewModelClass
的实例。
public MyViewModelClass viewModel = new MyViewModelClass();
2)将DataContext
设置为先前设置的实例。
this.DataContext = this.viewModel;
3)从资源文件中添加值:
this.viewModel.FirstName = MyResourceFile.FirstName; this.viewModel.LastName = MyResourceFile.LastName; this.viewModel.Age = MyResourceFile.Age;
4)将它们绑定在您的XAML中:
//The names of the public properties in the View Model class
我对这一切感到困惑! 这些东西意味着什么?
如果您使用INotifyPropertyChanged
您将能够在绑定值更改时自动更新UI。 这是因为在每个属性的setter
中,都有OnPropertyChange();
调用将通知您的UI值的更改。 OnPropertyChange()调用应始终在值更改之后 ,否则更改将不会反映在UI上。
每个页面都有一个DataContext
(不仅是页面,还有很多元素)。 从中,您可以使用XAML中的{Binding something}
绑定您的值。 我们正在创建View Model类的实例,该实例将是当前页面的DataConext。 绑定系统将查找相应的属性名称。 如果找到它们,则会在UI上显示这些值。 如果没有,则不会发生错误,但是如果您期望值,则不会显示任何错误。
您可以找到有关此模式的大量文档资源,只需搜索MVVM(Model-View-ViewModel) 。
我hava创造了一种myown的方法:
1)在App.xaml中
2)ResourceStringConventer
public class ResourceStringConventer : IValueConverter { public object Convert(object value, Type targetType, object parameter, string language) { ResourceLoader resourceLoader = new ResourceLoader(); string text = resourceLoader.GetString((string)parameter); return text; } public object ConvertBack(object value, Type targetType, object parameter, string language) { throw new NotImplementedException(); } }
3)绑定
我看到的唯一骗局是你必须将XAML中的DataContext属性设置为随机的同一个东西。 我可以将字符串名称/键放在DataContext中,但这样我就无法将DataContext用于其真正的目的。
由于您已经拥有一个使用资源文件的Windows Phone 8应用程序,因此可以轻松地为您的Windowsapp store应用程序工作。 您需要做的就是复制WinPhone应用程序中的WinStore应用程序中的结构。
- 在WinStore应用程序中创建一个LocationStrings类
- 将该类的内容从WinPhone复制并粘贴到WinStore
- 在您的应用中添加一个新的Resources文件夹
- 添加名为AppResources的新资源文件。 对于VS2012 + Windows 8应用程序,您将找到Resource.resw文件。 使用此类型。
- 单击解决方案资源管理器中的文件。
- 打开属性Windows并将“PublicResXFileCodeGenerator”粘贴到“自定义工具”属性中(不带单引号)
- 在App.xaml中,在ResourceDictionary元素中添加以下内容(更改名称空间以匹配您自己的名称空间)
- 以与Windows Phone 8应用程序相同的方式更改xaml中的文本值Text =“{Binding Path = LocalizedResources.Test,Source = {StaticResource LocalizedStrings}}”
希望有所帮助!
上述就是C#学习教程:使用C#和XAML在Windowsapp store应用中绑定资源文件值字符串分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1021654.html