2013-12-16 43 views
0

我想用表中的单击按钮修改行。如何绑定CommandParameter并在radgridview中获取选定的行ID

它我的代码:

视图模型:

 public class PrzeszukiwanieBazyViewModel : INotifyPropertyChanged 
    { 
     private ModelBazyDanych _modelBazy; 
     private IList<EwidencjonowanaRzecz> _ewidencjaList; 
     private String _test; 

     public string Test 
     { 
      get { return _test; } 
      set 
      { 
       if (value == _test) return; 
       _test = value; 
       OnPropertyChanged(); 
      } 
     } 

     public IList<EwidencjonowanaRzecz> EwidencjaList 
     { 
      get { return _ewidencjaList; } 
      set 
      { 
       if (Equals(value, _ewidencjaList)) return; 
       _ewidencjaList = value; 
       OnPropertyChanged(); 
      } 
     } 


     public PrzeszukiwanieBazyViewModel(ModelBazyDanych pModelBazyDanych) 
     { 
      this._modelBazy = pModelBazyDanych; 
      LocalizationManager.Manager = new Jezyk(); 
//   EwidencjaList = ModelBazy.SelectAllFromTable<EwidencjonowanaRzecz>().Where(m => m.Status == 0).ToList(); 
     } 

     public ModelBazyDanych ModelBazy 
     { 
      get { return _modelBazy; } 
      set 
      { 
       if (Equals(value, _modelBazy)) return; 
       _modelBazy = value; 
       OnPropertyChanged(); 
      } 
     } 

     private DelegateCommand _odswiezanieCommand; 
     public ICommand OdswiezanieCommand 
     { 
      get 
      { 
       if (_odswiezanieCommand == null) 
        _odswiezanieCommand = new DelegateCommand(Odswiezanie); 
       return _odswiezanieCommand; 
      } 
     } 
     private DelegateCommand _wydajCommand; 
     public ICommand WydajCommand 
     { 
      get 
      { 
       if (_wydajCommand == null) 
        _wydajCommand = new DelegateCommand(Wydaj); 
       return _wydajCommand; 
      } 
     } 

     private void Wydaj() 
     { 
      // HOW TO WRITE THIS ?:> 
     } 

     private void Odswiezanie() 
     { 
//   MessageBox.Show(Test); 
      EwidencjaList = ModelBazy.SelectAllFromTable<EwidencjonowanaRzecz>().Where(m => m.Status == 0).ToList(); 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     [NotifyPropertyChangedInvocator] 
     protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

XAML:

<controls:RadGridView 
          Grid.Row="0" 
          x:Name="TableRadGridView" 
          ItemsSource="{Binding Source={StaticResource Locator}, Path=PrzeszukiwanieBazyViewModel.EwidencjaList}" 
          AutoGenerateColumns="False" 
          ColumnWidth="auto" 
          FilteringMode="Popup" 
          BorderThickness="0"> 
        <controls:RadGridView.Columns> 
         <controls:GridViewDataColumn DataMemberBinding="{Binding Id}" Header="Id" /> 
         <controls:GridViewDataColumn DataMemberBinding="{Binding Nazwa}" Header="Nazwa" /> 
         <controls:GridViewDataColumn DataMemberBinding="{Binding Model}" Header="Model" /> 
         <controls:GridViewDataColumn DataMemberBinding="{Binding Marka}" Header="Marka" /> 
         <controls:GridViewDataColumn DataMemberBinding="{Binding WagaRef.WagaPrzedmiotu}" Header="Waga" /> 
         <controls:GridViewDataColumn DataMemberBinding="{Binding KolorRef.Barwa}" Header="Kolor" /> 
         <controls:GridViewDataColumn DataMemberBinding="{Binding GdzieZnaleziono}" Header="Gdzie znaleziono" /> 
         <controls:GridViewDataColumn DataMemberBinding="{Binding KtoZnalazl}" Header="Kto znalazł" /> 

         <controls:GridViewDataColumn DataMemberBinding="{Binding Marka}" Header="Uwagi" /> 
         <controls:GridViewDataColumn DataMemberBinding="{Binding KategoriaRef.Nazwa}" Header="Kategoria" /> 
         <controls:GridViewDataColumn DataMemberBinding="{Binding UserRef.Login}" Header="Dodane przez" /> 
         <controls:GridViewDataColumn DataMemberBinding="{Binding Status}" Header="Status" /> 
       <controls:GridViewDataColumn Header="Wydaj"> 
        <controls:GridViewDataColumn.CellTemplate> 
         <DataTemplate> 
          <controls:RadButton Content="Wydaj" 
               Command="{Binding Source={StaticResource Locator},Path=PrzeszukiwanieBazyViewModel.WydajCommand}" 
               CommandParameter="qwerty"></controls:RadButton> 
         </DataTemplate> 
        </controls:GridViewDataColumn.CellTemplate> 
       </controls:GridViewDataColumn> 


      </controls:RadGridView.Columns> 
       </controls:RadGridView> 

,当我在选择行单击按钮,我想在这个变化领域的 “状态”记录。我唯一的想法是获得选定的行CommandParameter。我该如何实现这个目标?如何在VM中编写“Wydaj()”函数?

回答

0

有一个通用版本DelegateCommand。我假设你的CommandParameter是一个字符串,这样你就可以这样声明

private DelegateCommand<String> _wydajCommand; 
public ICommand WydajCommand 
{ 
    get 
    { 
     if (_wydajCommand == null) 
      _wydajCommand = new DelegateCommand<String>(Wydaj); 
     return _wydajCommand; 
    } 
} 

和执行处理函数可以

private void Wydaj(String parameter) 
+0

它工作正常,大THX; ) – user3045261

+0

啊,好!我正要说,McGarnagle似乎有更好的答案,因为我不知道Telerik DelegateCommand。但是,如果这样做,那么'nuff说。 –

1

首先,该ICommand.ExecuteCommand方法通常需要一个对象参数,所以它的实现应该是这样的:

private void Wydaj(object parameter) 
{ 
    if (parameter as EwidencjonowanaRzecz != null) 
     ((EwidencjonowanaRzecz)parameter).Status = "new status"; 
} 

(的ICommand大多数实现,包括Telerik的DelegateCommand,将允许您通过这个直接在构造函数中,因为你知道了:_wydajCommand = new DelegateCommand(Wydaj);

下一步,更新CommandParameter,将其绑定到该行数据:

<controls:RadButton Content="Wydaj" 
        Command="{Binding Source={StaticResource Locator},Path=PrzeszukiwanieBazyViewModel.WydajCommand}" 
        CommandParameter="{Binding}" /> 
相关问题