1

我有一个带有简单窗口的 wpf 应用程序,该窗口在绑定到 ViewModel 属性的文本框中显示文本。当我执行应用程序时,我可以在文本框中看到文本,但是当我执行基于白色的测试时,我随机得到不同的结果:

  • 大多数时候,它不受约束并且测试失败。
  • 有时它是绑定的(我可以看到白色引发的窗口中的文本),但是当代码想要获取窗口时,白色会抛出异常。
  • 有时(真的很少)它有效。

我试图执行的代码是这样的:

<Window x:Class="Sample.Tests.Wpf.MainWindow"     
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Height="350"
        Width="525">   
  <Grid>
    <TextBox Height="23"
             HorizontalAlignment="Left"
             Margin="22,19,0,0"
             Name="name"
             Text="{Binding Path=CountryName}" 
             VerticalAlignment="Top"
             Width="120" />
  </Grid>
</Window>

后面的代码:

namespace Sample.Tests.Wpf
{
  public partial class MainWindow
  {
    public MainWindow()
    {
      InitializeComponent();
      Loaded += delegate { DataContext = new MainWindowViewModel
                                         {
                                           CountryName = "Argentina"
                                         };
                          };
    }
  }
}

测试看起来像:

var app = Application.Launch("Sample.Tests.Wpf.exe");
var window = app.GetWindow("MainWindow");
Assert.IsNotNull(window);
var textbox = window.Get<TextBox>("name");
Assert.AreEqual("Argentina", textbox.Text);

任何想法?

4

1 回答 1

1

The Loaded event is not fired until the window is about to be rendered. My guess is that it has something to do with the timing of that event.

Does it work if you just assign the DataContext instead of waiting to respond?

namespace Sample.Tests.Wpf
{
    public partial class MainWindow
    {
         public MainWindow()
         {
              InitializeComponent();
              DataContext = new MainWindowViewModel
                                     {
                                       CountryName = "Argentina"
                                     };
         }
     }
}
于 2011-11-28T22:58:06.633 回答