我是一位经验丰富的程序员,但对WPF来说是新手。我已将表单上的文本块绑定到对象属性,但它没有像我在设置属性时所期望的那样更新表单。绑定似乎正确完成 - 如果我使用更新表单更改属性的按钮进行故障排除,但是当我最初通过解析本地XML文件在表单的构造函数中设置属性时,它不会更新。
我正在使用C#和VS2010。有人可以指导我做几个步骤,或者引用我的书或编码工具,让我超过这个驼峰。另外,请注意我选择通过在windowsclient.net上模仿“我如何:构建我的第一个WPF应用程序”中使用的范例来构建方式。如果您认为我的方法不对,我会很感激指向更好的教程。
表格XAML:
<Window ...
xmlns:vm="clr-namespace:MyProjectWPF.ViewModels">
<Grid>
<Grid.DataContext>
<vm:MyConfigurationViewModel />
</Grid.DataContext>
<TextBlock Name="textBlock4" Text="{Binding Path=Database}" />
</Grid>
MyConfigurationViewModel类定义:
class MyConfigurationViewModel : INotifyPropertyChanged
{
private string _Database;
public string Database
{
get { return _Database; }
set { _Database = value; OnPropertyChanged("Database"); }
}
public void LoadConfiguration()
{
XmlDocument myConfiguration = new XmlDocument();
myConfiguration.Load("myfile.xml");
XmlNode root = myConfiguration.DocumentElement;
Database = root["Database"].InnerText;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string Property)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(Property));
}
我的XAML形式背后的代码:
public partial class MyForm : Window
{
private ViewModels.myConfigurationViewModel mcvm
= new ViewModels.myConfigurationViewModel();
public MyForm()
{
mcvm.LoadConfiguration();
}
答案 0 :(得分:5)
您有两个myConfigurationViewModel实例。一个是在XAML中创建的,第二个是在表单的代码隐藏中创建的。您正在调用后面代码中的LoadConfiguration,它永远不会被设置为表单的DataContext。
从XAML中删除它:
<Grid.DataContext>
<vm:MyConfigurationViewModel />
</Grid.DataContext>
并将构造函数更改为:
public MyForm()
{
mcvm.LoadConfiguration();
DataContext = mcvm;
}
答案 1 :(得分:0)
你能试试这个XAML:
<Window ...
xmlns:vm="clr-namespace:MyProjectWPF.ViewModels">
<Grid>
<TextBlock Name="textBlock4" Text="{Binding Path=Database}" />
</Grid>
使用此代码:
public partial class MyForm : Window
{
private ViewModels.myConfigurationViewModel mcvm = new ViewModels.myConfigurationViewModel();
public MyForm()
{
mcvm.LoadConfiguration();
this.DataContext = mcvm;
}
[更新] 解释错误,将其删除。