2013-07-06 2 views
0

WPF를 사용 중이며 MVVM을 따르려고합니다. 그래서 내 모델을 속성으로 가진 VM이 있습니다. 모델에는 명령을 구현하는 model1의 목록 인 속성이 있습니다. ViewModel로 명령을 옮기고 싶지 않아보기에 액세스 할 수있는 이유는 목록에 얼마나 많은 요소가 있는지 알 수 없기 때문에 명령에 액세스 할 수 있는지 확인하기 위해서입니다. model1. 이 명령도 일부 처리를 수행하며이 처리 중에 명령에 바인딩 된 단추를 숨기는 창을 숨기려고합니다. 어떻게해야합니까? 어디를 봐야합니까?WPF에서 명령을 사용하여 명령을 보내는 창을 숨기려면 어떻게해야합니까?

답변

1

이 경우, ViewModel에 명령이 있고 매개 변수를 사용하는 것이 가장 좋습니다. 그렇게하면 사용자가 수정하려고하는 항목이 전달됩니다. 당신이 ItemsControl 그래서 만약 : 당신의 ViewModel에서

<ItemsControl ItemsSource="{Binding MyItems}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Button Content="{Binding Name, StringFormat=Push {0}}" 
        Command="{Binding DataContext.ItemPushedCommand, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" 
        CommandParameter="{Binding}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

을, 당신은 (당신이 당신이 편안 명령대로 사용할 수 있습니다, 내가 prism에서 DelegateCommand을 사용하고 있습니다)과 같이 명령을 정의하는 것입니다 :

private readonly DelegateCommand<Model> itemPushedCommand; 

public ICommand ItemPushedCommand { get { return itemPushedCommand; } } 

public MyViewModel() 
{ 
    itemPushedCommand = new DelegateCommand<Model>(OnItemPushed); 
} 

private void OnItemPushed(Model item) 
{ 
    // your item has been pushed! 
} 
+0

그리고 OnItemPushed 내부에서 항목의 루틴을 호출 할 수 있습니다. 귀하의 답변을 주셔서 감사합니다, 내가 찾고 있던 것입니다. – Andrei

관련 문제