白いフレームワークでテストするときにバインドされていない要素

StackOverflow https://stackoverflow.com/questions/8303380

  •  25-10-2019
  •  | 
  •  

質問

ビューモデルのプロパティにバインドされたテキストボックス内のテキストを表示する単純なウィンドウを備えたWPFアプリケーションがあります。アプリケーションを実行すると、テキストがテキストボックスに表示されますが、白いベースのテストを実行すると、ランダムに異なる結果があります。

  • ほとんどの場合、それはバインドされておらず、テストが失敗します。
  • 時々それはバインドされています(白で上げられたウィンドウのテキストが表示されます)が、コードがウィンドウを取得したいときに白は例外をスローします。
  • 時々(本当に少ない)動作します。

私が実行しようとしているコードはこれです:

<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);

何か案が?

役に立ちましたか?

解決

ロードされたイベントは、窓がレンダリングされようとするまで発射されません。私の推測では、それはそのイベントのタイミングと関係があるということです。

応答するのを待つ代わりにDataContextを割り当てるだけで機能しますか?

namespace Sample.Tests.Wpf
{
    public partial class MainWindow
    {
         public MainWindow()
         {
              InitializeComponent();
              DataContext = new MainWindowViewModel
                                     {
                                       CountryName = "Argentina"
                                     };
         }
     }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top