2013-12-16 42 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}" /> 
相關問題