2014-09-22 102 views
0

我有一個複選框列表視圖中的每一行。我想在視圖模型中將複選框OnClick綁定到我的命令。但它對我的Command沒有約束力。我該怎麼辦?下面是我的XAML和視圖模型綁定複選框命令

的XAML:

<Grid> 
     <ListView Name="lstdemo" ItemsSource="{Binding obcollection}"> 
      <ListView.View> 
       <GridView> 
        <GridView.Columns> 
         <GridViewColumn> 
          <GridViewColumn.CellTemplate> 
           <DataTemplate> 
            <CheckBox Name="chk" IsChecked="{Binding IsChecked,Mode=TwoWay,NotifyOnTargetUpdated=True}" Command="{Binding Path=UpdateCommand}" /> 
           </DataTemplate> 
          </GridViewColumn.CellTemplate> 
         </GridViewColumn> 
         <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" /> 
        </GridView.Columns> 
       </GridView> 
      </ListView.View> 

     </ListView> 
    </Grid> 

視圖模型:

public class MyViewModel 
    { 
     private List<Demo> lstdemo; 
     private ObservableCollection<Demo> Obcollection; 
     private SampleDb db; 
     public MyViewModel() 
     { 
      db = new SampleDb(); 
      lstdemo = db.Demoes.ToList(); 
      Convert(); 

     } 

     public void Convert() 
     { 
      Obcollection = new ObservableCollection<Demo>(lstdemo); 
     } 

     public ObservableCollection<Demo> obcollection 
     { 
      get { return Obcollection; } 
      set { Obcollection = value; } 
     } 

     private ICommand mUpdater; 
     public ICommand UpdateCommand 
     { 
      get 
      { 
       if (mUpdater == null) 
        mUpdater = new Updater(); 
       return mUpdater; 
      } 
      set 
      { 
       mUpdater = value; 
      } 
     } 

     public class Updater : ICommand 
     { 
      #region ICommand Members 

      public bool CanExecute(object parameter) 
      { 

       return true; 
      } 

      public event EventHandler CanExecuteChanged; 

      public void Execute(object parameter) 
      { 
       if (parameter == null) 
       { 
        MessageBox.Show("Hello"); 
       } 

      } 

      #endregion 
     } 

    } 

回答

0

DataTemplateDataContext是隱含的當前項目(ListView中的)。所以在這種情況下,您必須明確地爲您的Binding設置Source(或RelativeSource)。您可以使用RelativeSource尋父ListView這樣的:

<CheckBox Name="chk" IsChecked="{Binding IsChecked, 
           Mode=TwoWay,NotifyOnTargetUpdated=True}" 
      Command="{Binding Path=DataContext.UpdateCommand, 
        RelativeSource={RelativeSource AncestorType=ListView}}"/> 

注意有關Path變化。源現在是ListView,所以UpdateCommand的路徑是DataContext.UpdateCommand

+1

真棒..感謝它的工作 – nikhil 2014-09-22 19:27:41

+0

@nikhil歡迎您! – 2014-09-22 19:28:51