次のコードを検討してください。
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<Slider ValueChanged="slider_ValueChanged/>
<TextBox x:Name="counter"/>
</StackPanel>
</Window>
と
namespace Project1
{
public partial class Window1 : Window
{
public MainWindow() { InitializeComponent(); }
void slider_ValueChanged(object sender,
RoutedPropertyChangedEventArgs<double> e)
{
counter.Text = e.NewValue.ToString();
}
}
}
Sliderは、初期化中にValueChanged
イベントを発生させます。counter
null
これは、私がWPFを使用して遭遇した、より大きな問題の例です。UIイベントはいつでも発生する可能性があり、初期化コードを配置できる場所が1つもないため、すべての後で実行されることが保証されます。 WPFシステムが所有するポインターは初期化されていますが、UIイベントが発生する前です。
これに対処するための最もエレガントな方法は何ですか?この特定の例でデータバインディングを使用する必要があるという事実は、重要ではありません。