wpf2017.08.08 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.08.08 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 동동(이재동)
wpf2017.07.25 17:41

List는 List<ConvertOrderKey>이런식으로 자료가 들어가 있고


ItemTemplate안에는 

<Button Content="주문확인" Width="70" Command="{Binding ElementName=xListView, Path = DataContext.OrderClickCommand}" CommandParameter="{Binding}" />


이런식으로 구현하였다.

커맨드 파라미터는 그냥 ConvertOrderKey모델 전체를 넘겼다.


viewModel에서는


1
2
3
4
5
6
7
8
9
10
11
12
13
14
 private RelayCommand<ConvertOrderKey> _orderClickCommand;
 
        public RelayCommand<ConvertOrderKey> OrderClickCommand
        {
            get
            {
                return _orderClickCommand
                  ?? (_orderClickCommand = new RelayCommand<ConvertOrderKey>(
                    param =>
                    {
                        var temp = param;
                    }));
            }
        }

이렇게 구현하였다.

param에 모델데이터가 전부 넘어온다.


Posted by 동동(이재동)
wpf2017.07.17 16:54

일단 Command를 만든다.

1
2
        private bool _deleteCommand = true;
        public RelayCommand DeleteCommand { get; private set; }
 


ViewModel 생성자에 넣기

1
2
3
4
5
 public MainViewModel()
        {
            DeleteCommand = new RelayCommand(ExcuteDeleteCommand, () => _deleteCommand);
            OrderMenuList = new ObservableCollection<OrderMenu>();
        }



1
2
3
4
 private void ExcuteDeleteCommand()
        {
            OrderMenuList.RemoveAt(OrderMenuList.Count - 1);
        }


xaml코드에는


1
<Button x:Name="xdelete" Content="삭제"  Height="50" Margin="20" Command="{Binding DeleteCommand}" />


여러가지 파라미터를 사용하고 싶으면 여기 참고

https://msdn.microsoft.com/en-us/magazine/dn237302.aspx

'wpf' 카테고리의 다른 글

listbox에서 오른쪽 정렬하고 싶을때  (0) 2017.07.18
[WPF] NavagionManager  (0) 2017.07.17
MVVM Button Click Command 사용법  (0) 2017.07.17
MVVM을 쓰면서...  (3) 2016.10.24
바인딩이란?  (0) 2016.10.24
반복적인 xaml name 을 이용할때  (0) 2016.09.23
Posted by 동동(이재동)
Windows Phone 72011.03.31 17:54

이란 에러 메세지를 자주 본다.

 

만약 behind코드(xaml.cs)라면

 

Dispatcher.BeginInvoke(() =>
                                    {
                                        NavigationService.Navigate(new Uri("/Views/RecordView.xaml", UriKind.RelativeOrAbsolute));
                                    });

 

이렇게 쓰면 되겠지만

 

ViewModel 이나 Service에서는 어떻할까?

 

Deployment.Current.Dispatcher.BeginInvoke( ()=>
                       {
                           ServiceLocator.Current.LocationPermissionViewModel.NoButtonClick(null);
                       });

 

이렇게 쓰면 된다.

 

참조 : http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/43177228-1ab2-4489-afea-89b0bf61bdd7

Posted by 동동(이재동)