public class PropertyCell : CustomCell
A custom cell implementation that implements a generic method of showing different types of controls on a per row basis.
Remarks: This is ideal for things like showing a property grid to edit various properties of an object. The way this works is by using the TypeBinding of each row to determine which PropertyCellType to use from the Types collection. It calls PropertyCellType.CanDisplay(object) on each to find a type that can display based on the value returned. Each PropertyCellType added to the cell must have a unique value for PropertyCellType.Identifier to ensure the correct control is shown in the cell. The identifier is used to cache the content controls generated by the PropertyCellType when displaying the same value for other rows while scrolling. Ideally, the content control generated from the PropertyCellType should use MVVM BindDataContext() methods for its children so that they are updated automatically when reused for different controls. This is not a requirement, however you must then implement/override the PropertyCellType.OnConfigure(CellEventArgs, Control) to update your control when the item/row is changed.

Constructors

PropertyCell

#
public PropertyCell()
Initializes a new instance of the property cell

Properties

ConfigureCell

public Action<CellEventArgs, Control> ConfigureCell { get; set; }
Gets or sets a delegate to configure an cell when it is reused for a different row or the data changes.
inherited fromCustomCell
Remarks: This should set up your control your cell content to be reused. If null, the DataContext of your control will be set to the row model instance. Typically if you use MVVM data binding, you do not need to override the standard behaviour.
The delegate to configure an existing cell's control for a new row/model instance.

ControlObject

public object ControlObject { get; }
Gets the instance of the platform-specific object
inherited fromWidget
Remarks: This can sometimes be useful to get the platform-specific object. Some handlers may not have any backing object for its functionality, so this may be null. It is more preferred to use the Widget.Handler and cast that to the platform-specific handler class which can give you additional methods and helpers to do common tasks. For example, the Application object's handler for OS X has a AddFullScreenMenuItem property to specify if you want full screen support in your app.

CreateCell

public Func<CellEventArgs, Control> CreateCell { get; set; }
Gets or sets a delegate to create the contents of the cell.
inherited fromCustomCell
Remarks: You can also override the CustomCell.OnCreateCell(CellEventArgs) method in subclasses. Note that you need to handle CustomCell.ConfigureCell to set up the cell for a particular row of data as the control may be reused when scrolling the view.
The delegate to create the cell content.

GetIdentifier

public Func<CellEventArgs, string> GetIdentifier { get; set; }
Gets or sets a delegate to get the identifier of the cell based on its content.
inherited fromCustomCell
Remarks: When you have different controls on a per-row level, each variation must have an identifier string to allow the framework to cache the different types of cells to provide good performance. This hooks into standard cell caching mechanisms in certain platforms, such as on the Mac.
The delegate to get the identifier for the cell.

GetPreferredWidth

public Func<CellEventArgs, float> GetPreferredWidth { get; set; }
Gets or sets a delegate to get the preferred width of the cell based on its content.
inherited fromCustomCell
Remarks: This may only be used when CustomCell.SupportsControlView is false.
The delegate to get the preferred width of the cell.

Handler

public object Handler { get; }
Gets the platform-specific handler for this widget
inherited fromWidget

IsDisposed

public bool IsDisposed { get; }
Gets or sets a value indicating whether this Widget has been disposed.
inherited fromWidget
Remarks: When the widget is disposed, it can no longer be used.
true if this instance has been disposed; otherwise, false.

NativeHandle

public nint NativeHandle { get; }
Gets the native platform-specific handle for integration purposes
inherited fromWidget

Platform

public Platform Platform { get; }
Gets the platform that was used to create the Widget.Handler for this widget
inherited fromWidget
Remarks: This gets set to the current Platform.Instance during the construction of the object

Properties

public PropertyStore Properties { get; }
Gets the dictionary of properties for this widget
inherited fromWidget

Style

public string Style { get; set; }
Gets or sets the style of this widget
inherited fromWidget
Remarks: Styles allow you to attach custom platform-specific logic to a widget. In your platform-specific assembly, use Add{H} to add the style logic with the same id.
// in your UI
var control = new Button { Style = "mystyle" };

// in your platform assembly
using Eto.Mac.Forms.Controls;

Styles.AddHandler<ButtonHandler>("mystyle", handler => {
	// this is where you can use handler.Control to set properties, handle events, etc.
	handler.Control.BezelStyle = NSBezelStyle.SmallSquare;
});

TypeBinding

#
public IIndirectBinding<object> TypeBinding { get; set; }
Gets or sets the binding to get the type for the

Types

#
public IList<PropertyCellType> Types { get; }
Gets the list of types to use for each cell, in order of preference.
Remarks: When attempting to use a type for a cell, the types collection is scanned in order for the first PropertyCellType that returns true for PropertyCellType.CanDisplay(object).
The list of types this property cell supports.

Methods

Dispose

protected virtual void Dispose(bool disposing)
Handles the disposal of this widget
inherited fromWidget
disposing (bool)True if the caller called Widget.Dispose() manually, false if being called from a finalizer

GetCallback

protected override object GetCallback()
Gets an instance of an object used to perform callbacks to the widget from handler implementations
inherited fromCustomCell

Initialize

protected void Initialize()
Initializes the widget handler
inherited fromWidget
Remarks: This is typically called from the constructor after all of the logic is completed to construct the object. If your handler interface has the AutoInitializeAttribute set to false, then you are responsible for calling this method in your constructor after calling the creation method on your custom handler.

OnConfigureCell

#
protected override void OnConfigureCell(CellEventArgs args, Control control)
Configures an existing cell when it is reused for a different row or the data changes.
Remarks: This should set up your control your cell content to be reused. If null, the DataContext of your control will be set to the row model instance. Typically if you use MVVM data binding, you do not need to override the standard behaviour.
args (CellEventArgs)Arguments for the cell
control (Control)Existing control to configure for the new cell and/or data

OnCreateCell

#
protected override Control OnCreateCell(CellEventArgs args)
Creates an instance of the control for a cell.
args (CellEventArgs)Arguments when creating the cell to get the row, item and state.
The control to display in the cell.

OnGetIdentifier

#
protected override string OnGetIdentifier(CellEventArgs args)
Gets the identifier of the cell based on its content.
Remarks: When you have different controls on a per-row level, each variation must have an identifier string to allow the framework to cache the different types of cells to provide good performance. This hooks into standard cell caching mechanisms in certain platforms, such as on the Mac.
The identifier for the cell.
args (CellEventArgs)Arguments for the cell

OnGetPreferredWidth

protected virtual float OnGetPreferredWidth(CellEventArgs args)
Gets the preferred width of the cell based on its content.
inherited fromCustomCell
Remarks: This may only be used when CustomCell.SupportsControlView is false.
The preferred width of the cell.
args (CellEventArgs)Arguments for the cell

OnStyleChanged

protected virtual void OnStyleChanged(EventArgs e)
Handles when the Widget.Style is changed.
inherited fromWidget

ToString

public override string ToString()
Gets a string that represents the current object with its ID if specified.
inherited fromWidget
A string value indicating the type and ID (if specified) of this widget.
Object.ToString

Events