有一个工具 - PublicResXFileCodeGenerator
,可以用来访问资源文件的值:
MyResourceFile.ResourceString
你可以将该值存储到属性中,然后在 UI 上进行绑定。
为了使用绑定方法,您需要一个 ViewModel,并将其设置为 View 的 DataContext。
假设您的资源文件中有三行值:FirstName、LastName 和 Age。那么您将像这样访问它们:
string firstName = MyResourceFile.FirstName
string lastName = MyResourceFile.LastName
int age = Convert.ToInt32(MyResourceFile.Age)
你需要创建一个类,作为你的视图模型。
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(); }
}
}
然后在相应的视图代码后台.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
将它们绑定在你的XAML中:
4)
<TextBlock Text="{Binding FirstName}" />
<TextBlock Text="{Binding LastName}" />
<TextBlock Text="{Binding Age}" />
//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)即可。