如何在WPF中为数据网格中的每一行(包含两个字段)添加删除按钮.而datagrid itemsource是
ObservableCollection<Result>
Run Code Online (Sandbox Code Playgroud)
和
public class Result : INotifyPropertyChanged
{
public string FriendlyName { get; set; }
public string Id { get; set; }
public Result(string name, string id)
{
this.FriendlyName = name;
this.Id = id;
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string property)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
}
Fre*_*lad 27
您可以添加DataGridTemplateColumn并添加Button到它CellTemplate.然后使用内置ApplicationCommands.Delete或自己ICommand的Button
<DataGrid ItemsSource="{Binding Results}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="FriendlyName"
Binding="{Binding FriendlyName}"/>
<DataGridTextColumn Header="Id"
Binding="{Binding Id}"/>
<DataGridTemplateColumn Header="Delete">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete"
Command="Delete"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
更新
如果您不想使用内置的,Delete您可以使用自己的ICommand.以下是一个简短示例RelayCommand,可在以下链接中找到:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx.另外,我在这里上传了它:RelayCommand.cs
<DataGrid ItemsSource="{Binding Results}"
SelectedItem="{Binding SelectedResult}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<!-- ... -->
<DataGridTemplateColumn Header="Delete">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete"
Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}},
Path=DataContext.DeleteCommand}"
CommandParameter="{Binding}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
并在您的viewmodel或代码后面
private Result m_selectedResult;
public Result SelectedResult
{
get { return m_selectedResult;}
set
{
m_selectedResult = value;
OnPropertyChanged("SelectedResult");
}
}
private bool CanDelete
{
get { return SelectedResult != null; }
}
private ICommand m_deleteCommand;
public ICommand DeleteCommand
{
get
{
if (m_deleteCommand == null)
{
m_deleteCommand = new RelayCommand(param => Delete((Result)param), param => CanDelete);
}
return m_deleteCommand;
}
}
private void Delete(Result result)
{
Results.Remove(result);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20076 次 |
| 最近记录: |