ポップアップウィンドウにcheckbox.IsChecked
モデルがバインドされていますが、ウィンドウが表示されたときにxamlコードビハインドからモデルの状態を確認したいと思います。Windowsのロードされたイベントからコードビハインドで名前でチェックボックスをチェックすると、まだ設定されていません。私がしなければならないUI固有のことがいくつかあります。そのため、ウィンドウが開いたときにチェックボックスの値が何であるかを知る必要があり、checkbox.IsCheckedがバインドされているモデルからこれを実行することはできません。
モデルのプロパティはポップアップウィンドウが開くずっと前に設定されているため、バインディングが存在しないという問題はありません。Loadedイベントが発生すると、ウィンドウはバインディングなどすべてを使用できるようになると思いましたが、そうではないようです。
Xaml:
<RefinedRibbonControls:RefinedRibbonGroup Header="Show Graphs">
<StackPanel x:Name="panelVisibilities">
<CheckBox Content="Show/hide" x:Name="myCheckBox"
IsChecked="{Binding Path=Processor.Model.IsItemVisible}"
Click="GraphVisibilityClickEvent"
HorizontalAlignment="Left"/>
...etc
モデルのプロパティ:
public bool IsItemVisible
{
get { return _isItemVisible ; }
set
{
if (_isItemVisible != value)
{
_isItemVisible = value;
_propertyChanger.FirePropertyChanged(this, m => m.IsItemVisible);
}
}
}
Xamlコードビハインドのイベント:
private void WindowLoadedEvent(object sender, RoutedEventArgs e)
{
if(myCheckBox.IsChecked.Value)
{
// Do UI Related Stuff
}
}
バインディングは正常に機能し、ウィンドウが表示されたときに値が表示されます。問題は、ウィンドウが読み込まれたイベントでバインディングの値を取得できないことです。
編集:私が見つけた可能な解決策ですが、それが最善の方法かどうかはわかりません。xamlコードビハインドのコンストラクターから次のメソッドを呼び出しました。
private void SetupInitialVisibility()
{
//Fire after everything is loaded.
Dispatcher.BeginInvoke(DispatcherPriority.ContextIdle, new Action(() =>
{
IEnumerable<CheckBox> elements = this.panelVisibilities.Children.OfType<CheckBox>().ToList();
foreach (CheckBox checkBox in elements)
{
if (checkBox.IsChecked != null && checkBox.IsChecked.Value == false)
{
//Do work
}
}
}));
}