2015-01-29 1 views
0

(MVVMLight) :ListView DataTemplate의 버튼을 ViewModel의 명령에 바인딩하는 방법은 무엇입니까? 나는 다음 코드를 사용하여 목록보기를

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
    <ListBox x:Name="allToDoItemsListBox" 
      ItemsSource="{Binding AllToDoItems,Mode=OneWay}" 
      Margin="12,0,12,0" 
      Width="440" 
      ItemTemplate="{StaticResource ToDoListBoxItemTemplate}" /> 
</Grid> 

다음과 같이 DataTemplate을은 다음과 같습니다

<phone:PhoneApplicationPage.Resources> 
    <DataTemplate x:Key="ToDoListBoxItemTemplate"> 

     <Grid HorizontalAlignment="Stretch" Width="420"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="100" /> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="Auto" /> 
       <ColumnDefinition Width="100" /> 
      </Grid.ColumnDefinitions> 

      <CheckBox 
       IsChecked="{Binding IsComplete, Mode=TwoWay}" 
       Grid.Column="0" VerticalAlignment="Top"/> 

      <TextBlock 
       Text="{Binding ItemName}" 
       FontSize="{StaticResource PhoneFontSizeLarge}" 
       Foreground="Gray" 
       Grid.Column="1" Grid.ColumnSpan="2" 
       VerticalAlignment="Top" Margin="-36, 12, 0, 0"/> 

      <Button         
       Grid.Column="3" 
       x:Name="deleteTaskButton" 
       BorderThickness="0"                 
       Margin="0, -18, 0, 0" 
       Command="{Binding Path=DeleteCommand}" CommandParameter="{Binding}"/> 

      <Image 
       Source="/Images/appbar.delete.rest.png" 
       Height="75" 
       Width="75"/> 
     </Grid> 
    </DataTemplate> 
</phone:PhoneApplicationPage.Resources> 

내가 뷰 모델의 ICommand의 버튼 명령 "DeleteCommand에"를 결합하려고 노력하지만, 나는 무엇을해야합니까?

뷰 모델의 코드는 다음과 같습니다 뷰 모델에서

public ICommand DeleteCommand { get; private set; } 

가 구축 :

DeleteCommand = new RelayCommand<object>(Delete); 

하고 삭제 방법 :

private void Delete(object obj) 
{ 
    ToDoItem newToDoItem = obj as ToDoItem; 
    DeleteToDoItem(newToDoItem); 
} 

내가 DeleteToDoItem에 항목을 통과해야을 () 메서드를 매개 변수로 사용하여 목록의 각 항목에 해당하는 삭제 단추를 눌렀지만 쉼표 여기서 내가 어떻게해야하지?

답변

2

ViewModel에서 ToDoItem을 삭제 명령에 전달하려고합니다.

DeleteCommand = new RelayCommand<ToDoItem>(DeleteToDoItem); 

그리고 DataTemplate의 DataContext는 ListView와 다릅니다.

<Button Command="{Binding ElementName=allToDoItemsListBox, 
          Path=DataContext.DeleteCommand}" 
     CommandParameter="{Binding}" /> 

그렇게해야합니다.

관련 문제