2014-04-17 3 views
0

UiElement를 사용하여 코드에서 바운드 명령을 실행하려고합니다. button.Command.Execute(button.CommandParameter)코드 뒤에서 UIElement 명령 호출

그러나이 시점에서 버튼의 Command 속성은 null입니다. 동시에 View Model에서 명령을 확인할 때 속성이 설정됩니다. 내가 창안 할 수있는 유일한 진단은 윈도우가 실제로 보일 때까지 명령이 버튼의 명령 속성에 묶여 있지 않다는 것입니다. 나는 어딘가에 한 걸음도 놓치고있는 것처럼 느껴진다. 그렇지 않으면 내 구현이 건전하지 않다. 아래 코드의 일부 스 니핏입니다. 더 많은 정보가 필요하면 알려주십시오.

윈도우 생성자 :

public PlottingViewModel ViewModel { get; set; } 

public PlottingGUI() 
{ 
    InitializeComponent(); 
    DataContext = (ViewModel = new PlottingViewModel()); 
    _setDefaultSelections(); 
} 

IList<RadioButton> buttons; 

설정 기본 선택하십시오 RadioButtons XAML의

private void _setDefaultSelections() 
{ 
    buttons = new List<RadioButton>(); 
    _getRadioButtons(this); 
    foreach (var setting in ViewModel.Settings.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)) 
    { 
     var settingValue = setting.GetValue(ViewModel.Settings); 
     var button = buttons.FirstOrDefault(btn => btn.Content.Equals(settingValue) 
       || ((string)btn.CommandParameter).Equals(settingValue)); 

     if (button == null) 
      continue; 
     button.IsChecked = true; 

     // NullReference here 
     // button.Command.Execute(button.CommandParameter); 
    } 
} 

하나

<RadioButton Content="None" 
      Grid.Row="0" 
      Command="{Binding StampedCommand}" 
      CommandParameter="None" 
      Foreground="WhiteSmoke"/> 

내 기분이, 내가 성공적으로 할 수있을 수있는 유일한 방법 이 작업을 완료하면 내 viewmodel에서 직접 명령을 실행하는 것입니다.

+1

'Loaded' 이벤트에서'_setDefaultSelections'을 (를) 호출하려 했습니까? – dkozl

+0

@ dkozl 당신을 사랑합니다 ... –

답변

1

은 아직 업데이트되지 않은 _setDefaultSelections() 바인딩을 호출하고있는 점에 의견을 요약하면 .. 읽어

덕분에 (내가하고 싶지 않아 어떤), 따라서 Command 때문에, 여전히 널 모든 것이로드 될 때까지 기다려야합니다. Loaded 이벤트 중에 _setDefaultSelections으로 전화 할 수 있습니다.

요소가 배치되고 렌더링되고 상호 작용할 준비가되면 발생합니다.