'2017/08/08'에 해당되는 글 2건

  1. 2017.08.08 MVVM 하위 컨트롤 바인딩
  2. 2017.08.08 ViewModel 끼리의 통신
wpf2017. 8. 8. 16:18

예를들어 View의 UserControl의 DataContext에 데이터를 주입하고

 <local:CardCancelControl DataContext="{Binding CardCancelData}" />


이런식으로...

유저컨트롤에서 버튼 커맨드를 넣었을때


 <Button Content="확인" Command="{Binding DataContext.CardCancelCommand}"  CommandParameter="Cancel" />


이런식으로 넣으면 안된다. datacontext안에 서 command를 호출하기 때문이다


이렇게 할려면 상위에서 DataContext를 빼야 작동한다.


그러면 상위에서 호출되게 할려면 어떻게 해야할까.


 <Button Content="확인" Command="{Binding Path=DataContext.CardCancelCommand,

                        RelativeSource={RelativeSource Mode=FindAncestor,

                        AncestorType={x:Type local:PopupControl}}}" CommandParameter="Cancel" />


이렇게 하면 된다.

참고 : https://stackoverflow.com/questions/3404707/access-parent-datacontext-from-datatemplate


Posted by 동동(이재동)
wpf2017. 8. 8. 15:38

MvvmLight를 사용한다는 기준으로 작성한다.


1
2
3
4
        private void ExcuteSettingCommand()
        {
            MessengerInstance.Send(SettingEnum.OpenSettingPopup);
        }


MessngerInstance를 이용하여

일단 보내는 값을 object형태 (여기서는 enum)로 보낸다.


받는 ViewModel에서는


1
2
3
4
5
6
7
8
9
  public PopupViewModel()
        {
            MessengerInstance.Register<SettingEnum>(this, c => SettingExcute(c));
        }
 
        public void SettingExcute(SettingEnum result)
        {
            //some code
        }


이런식으로 등록하면 통신이 된다.

Posted by 동동(이재동)