![](/img/trans.png)
[英]How do I properly bind the CommandParameter with my ContextMenu to the selected ListViewItem
[英]How to bind CommandParameter and get selected row id in radgridview
我想在表格中点击按钮来修改行。
它是我的代码:
查看模型:
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()”函数?
首先, 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}" />
有一个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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.