我想在表格中点击按钮来修改行。
我的代码:
查看模型:
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 :(得分: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}" />
答案 1 :(得分:0)
DelegateCommand的通用版本。我假设你的CommandParameter是一个String,所以你可以这样声明它
private DelegateCommand<String> _wydajCommand;
public ICommand WydajCommand
{
get
{
if (_wydajCommand == null)
_wydajCommand = new DelegateCommand<String>(Wydaj);
return _wydajCommand;
}
}
并且执行处理函数可以是
private void Wydaj(String parameter)