如何使用 Xamarin.Mac 从 NSTableView 获取已编辑单元格的行和列?
How can I get the row and column of an edited cell from NSTableView using Xamarin.Mac?
我正在构建一个 Xamarin.Mac 应用程序,其中一个 ViewControllers
包含一个 NSTableView
。我已经成功填充 table 视图,但我希望用户能够编辑某些单元格内容。
在功能上,我还能够获取单元格编辑table。但是,我无法提取已编辑单元格的行和列。 这可能吗?
我有 NSTableViewDelegate
代码:
public override NSView GetViewForItem(NSTableView tableView, NSTableColumn tableColumn, nint row)
{
// Get the data
var Data = this._dataSource.DataRecords[(int)row];
NSTextField view = (NSTextField)tableView.MakeView(CellIdentifier, this);
if (view == null)
{
view = new NSTextField();
view.Identifier = CellIdentifier;
view.BackgroundColor = NSColor.Clear;
view.Bordered = false;
view.Selectable = true;
view.Editable = true;
view.EditingEnded += this.EditingEnded;
}
// Setup view based on the column selected
if(tableColumn.Title.Equals(string.Empty)) {
view.IntValue = Convert.ToInt16(row);
}
else {
view.StringValue = Data.Get(tableColumn.Title).ToString();
}
return view;
}
void EditingEnded(object sender, EventArgs e)
{
// I can get a reference to the correct, edited, NSTextField
// with the following line.
var textField = ((NSNotification)sender).Object as NSTextField;
// However, HERE, I would like to know what row and column was edited so
// that I can update my source data with the user-made change.
}
有谁知道如何使用此逻辑来获取已编辑单元格在 NSTableView
中的位置?
我正在使用 Xamarin.Mac,但我假设如果我为我的应用程序使用 Swift 或 Objective-C,同样的 logic/question 也适用。我也很乐意用这两种语言中的任何一种回答。
您可以使用 NSTableView 获取 NSTableView 中任何 NSView 的列和行:
- RowForView
- ColumnForView
示例:
var textField = ((NSNotification)sender).Object as NSTextField;
var row = someTableView.RowForView(textField);
var column = someTableView.ColumnForView(textField);
我正在构建一个 Xamarin.Mac 应用程序,其中一个 ViewControllers
包含一个 NSTableView
。我已经成功填充 table 视图,但我希望用户能够编辑某些单元格内容。
在功能上,我还能够获取单元格编辑table。但是,我无法提取已编辑单元格的行和列。 这可能吗?
我有 NSTableViewDelegate
代码:
public override NSView GetViewForItem(NSTableView tableView, NSTableColumn tableColumn, nint row)
{
// Get the data
var Data = this._dataSource.DataRecords[(int)row];
NSTextField view = (NSTextField)tableView.MakeView(CellIdentifier, this);
if (view == null)
{
view = new NSTextField();
view.Identifier = CellIdentifier;
view.BackgroundColor = NSColor.Clear;
view.Bordered = false;
view.Selectable = true;
view.Editable = true;
view.EditingEnded += this.EditingEnded;
}
// Setup view based on the column selected
if(tableColumn.Title.Equals(string.Empty)) {
view.IntValue = Convert.ToInt16(row);
}
else {
view.StringValue = Data.Get(tableColumn.Title).ToString();
}
return view;
}
void EditingEnded(object sender, EventArgs e)
{
// I can get a reference to the correct, edited, NSTextField
// with the following line.
var textField = ((NSNotification)sender).Object as NSTextField;
// However, HERE, I would like to know what row and column was edited so
// that I can update my source data with the user-made change.
}
有谁知道如何使用此逻辑来获取已编辑单元格在 NSTableView
中的位置?
我正在使用 Xamarin.Mac,但我假设如果我为我的应用程序使用 Swift 或 Objective-C,同样的 logic/question 也适用。我也很乐意用这两种语言中的任何一种回答。
您可以使用 NSTableView 获取 NSTableView 中任何 NSView 的列和行:
- RowForView
- ColumnForView
示例:
var textField = ((NSNotification)sender).Object as NSTextField;
var row = someTableView.RowForView(textField);
var column = someTableView.ColumnForView(textField);