C#WPF绑定行为

Lik*_*ell 1 c# wpf binding

我是一位经验丰富的程序员,但对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>
Run Code Online (Sandbox Code Playgroud)

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));
  }
Run Code Online (Sandbox Code Playgroud)

我的XAML表单背后的代码:

public partial class MyForm : Window
{
  private ViewModels.myConfigurationViewModel mcvm
    = new ViewModels.myConfigurationViewModel();

  public MyForm()
  {
    mcvm.LoadConfiguration();
  }
Run Code Online (Sandbox Code Playgroud)

Szy*_*zga 5

您有两个myConfigurationViewModel实例.一个是在XAML中创建的,第二个是在表单的代码隐藏中创建的.您正在调用后面代码中的LoadConfiguration,它永远不会被设置为窗体的DataContext.

从XAML中删除它:

<Grid.DataContext>       
    <vm:MyConfigurationViewModel />
</Grid.DataContext> 
Run Code Online (Sandbox Code Playgroud)

并将构造函数更改为:

public MyForm()
{
    mcvm.LoadConfiguration();    
    DataContext = mcvm;
}   
Run Code Online (Sandbox Code Playgroud)