AppConfig sample class
- Last UpdatedAug 21, 2026
- 2 minute read
The following is a sample editor class that was derived from IEditorConfig.
Sample Class for AppConfig (SampleAppEditor)
namespace SampleAppConfig
{
public class SampleActivity : EditorActivityViewModelBase
{
private string userText = "SampleText";
private string userText2 = "App Specific data 2";
IEditorBase editor;
public SampleActivity(IEditorBase editor): base(editor)
{
this.editor = editor;
}
public override string Label { get { return "Asset"; } }
public void Load(Dictionary<string, byte[]> appData)
{
var data = appData["mydata"];
this.userText = Encoding.UTF8.GetString(data);
var data2 = appData["mydata2"];
this.userText2 = Encoding.UTF8.GetString(data2);
}
public Dictionary<string, byte[]> Save()
{
/////this.Editor.Preferences.SetPreference("Value", "MyValue");
var byteString = Encoding.UTF8.GetBytes(this.userText);
var byteString2 = Encoding.UTF8.GetBytes(this.userText2);
var appData = new Dictionary<string, byte[]>();
appData.Add("mydata", byteString);
appData.Add("mydata2", byteString2);
return appData;
}
public string UserText
{
get { return this.userText; }
set
{
if (!this.editor.IsReadOnly)
{
this.userText = value;
this.SetDirty();
}
}
}
public string UserText2
{
get { return this.userText2; }
set
{
if (!this.editor.IsReadOnly)
{
this.userText2 = value;
this.SetDirty();
}
}
}
public bool IsNotReadOnly
{
get
{
return !this.editor.IsReadOnly;
}
}
public Uri GetResourceUri(Assembly assembly, string path) {
return new Uri(string.Format(CultureInfo.InvariantCulture, "pack://application:,,,/{0};Component/{1}", new AssemblyName(assembly.FullName).Name, path), UriKind.Absolute);
}
public override void RegisterCommands()
{
ResourceDictionary icons = new ResourceDictionary() { Source = GetResourceUri((typeof(SampleActivity).Assembly), "Resources/Icons.xaml") };
DrawingBrush comIcon1 = icons["Undo_Icon"] as DrawingBrush;
IAppCommandUI commandUI1 = this.editor.AppCommandManager.CreateAppCommandUI("Import", "Import:Custom Command can be used in Map Editor", comIcon1);
IAppCommandUI commandUI2 = this.editor.AppCommandManager.CreateAppCommandUI("Export", "Export:Custom Command can be used in Map Editor", null);
this.editor.AppCommandManager
.BeginCommandGroup()
.AddSimpleCommand(this.CompoundTestItemCommand1, commandUI1)
.AddSimpleCommand(this.CompoundTestItemCommand2, commandUI2);
}
private ICommand compoundTestItemCommand1;
private ICommand compoundTestItemCommand2;
public ICommand CompoundTestItemCommand1
{
get
{
return RelayCommand.Create(ref this.compoundTestItemCommand1, () => { MessageBox.Show("Import is click"); }, CanExecuteCommands);
}
}
public ICommand CompoundTestItemCommand2
{
get
{
return RelayCommand.Create(ref this.compoundTestItemCommand2, () => { MessageBox.Show("Export is click"); }, CanExecuteCommands);
}
}
public bool CanExecuteCommands()
{
return this.IsNotReadOnly;
}
}
}
The following is a sample class for activity (page/tab):
Sample Class for Activity (SampleViewModel)
Sample class for activity.
public class SampleViewModel : EditorActivityViewModelBase
{
/// <summary>
/// Constructor for SampleViewModel that uses IEditorBase
/// </summary>
/// <param name="editor">IEditorBase</param>
public SampleViewModel(IEditorBase editor)
: base(editor)
{
}
/// <summary>
/// Name of the page/tab/activity
/// </summary>
public override string Label
{
get
{
return "sample activity";
}
}
}