|
using System;
using System.Text;
namespace SampleApp.ViewModels
{
/// <summary>
/// The view-model for a text file document.
/// </summary>
public class TextFileDocumentViewModel : AbstractViewModel
{
/// <summary>
/// The default name for untitled files.
/// </summary>
public static readonly string UntitledFileName = "Untitled.txt";
/// <summary>
/// The file path of the document.
/// </summary>
private string filePath = string.Empty;
/// <summary>
/// The text of the document.
/// </summary>
private string text = string.Empty;
/// <summary>
/// Set to 'true' when the document is modified and needs to be saved.
/// </summary>
private bool isModified = false;
public TextFileDocumentViewModel(string filePath, string text, bool isModified)
{
this.filePath = filePath;
this.text = text;
this.isModified = isModified;
}
/// <summary>
/// The title of the document.
/// </summary>
public string Title
{
get
{
var title = new StringBuilder();
title.Append(this.FileName);
if (this.IsModified)
{
title.Append("*");
}
return title.ToString();
}
}
/// <summary>
/// Tooltip to display in the UI.
/// </summary>
public string ToolTip
{
get
{
var toolTip = new StringBuilder();
if (string.IsNullOrEmpty(this.FilePath))
{
toolTip.Append(UntitledFileName);
}
else
{
toolTip.Append(this.FilePath);
}
if (this.IsModified)
{
toolTip.Append("*");
}
return toolTip.ToString();
}
}
/// <summary>
/// Name of the file (with the path stripped off).
/// </summary>
public string FileName
{
get
{
if (string.IsNullOrEmpty(this.FilePath))
{
return UntitledFileName;
}
return System.IO.Path.GetFileName(this.FilePath);
}
}
/// <summary>
/// The file path of the document.
/// </summary>
public string FilePath
{
get
{
return filePath;
}
set
{
if (filePath == value)
{
return;
}
filePath = value;
OnPropertyChanged("FilePath");
OnPropertyChanged("FileName");
OnPropertyChanged("Title");
OnPropertyChanged("ToolTip");
}
}
/// <summary>
/// The path to the directory that contains the file.
/// </summary>
public string DirectoryPath
{
get
{
if (string.IsNullOrEmpty(this.FilePath))
{
return string.Empty;
}
return System.IO.Path.GetDirectoryName(this.FilePath);
}
}
/// <summary>
/// The text of the document.
/// </summary>
public string Text
{
get
{
return text;
}
set
{
if (text == value)
{
return;
}
text = value;
this.IsModified = true;
OnPropertyChanged("Text");
}
}
/// <summary>
/// Set to 'true' when the document is modified and needs to be saved.
/// </summary>
public bool IsModified
{
get
{
return isModified;
}
set
{
if (isModified == value)
{
return;
}
isModified = value;
OnPropertyChanged("IsModified");
OnPropertyChanged("Title");
OnPropertyChanged("ToolTip");
if (this.IsModifiedChanged != null)
{
this.IsModifiedChanged(this, EventArgs.Empty);
}
}
}
/// <summary>
/// Event raised when the IsModified has changed.
/// </summary>
public event EventHandler<EventArgs> IsModifiedChanged;
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Software craftsman | Author | Writing rapidfullstackdevelopment.com - Posting about how to survive and flourish as a software developer
Follow on Twitter for news and updates: https://twitter.com/codecapers
I'm writing a new book: Rapid Fullstack Development. Learn from my years of experience and become a better developer.
My second book, Bootstrapping Microservices, is a practical and project-based guide to building distributed applications with microservices.
My first book Data Wrangling with JavaScript is a comprehensive overview of working with data in JavaScript.
Data-Forge Notebook is my notebook-style application for data transformation, analysis and transformation in JavaScript.
I have a long history in software development with many years in apps, web apps, backends, serious games, simulations and VR. Making technology work for business is what I do: building bespoke software solutions that span multiple platforms.
I have years of experience managing development teams, preparing technical strategies and creation of software products. I can explain complicated technology to senior management. I have delivered cutting-edge products in fast-paced and high-pressure environments. I know how to focus and prioritize to get the important things done.
Author
- Rapid Fullstack Development
- Bootstrapping Microservices
- Data Wrangling with JavaScript
Creator of Market Wizard
- https://www.market-wizard.com.au/
Creator of Data-Forge and Data-Forge Notebook
- http://www.data-forge-js.com
- http://www.data-forge-notebook.com
Web
- www.codecapers.com.au
Open source
- https://github.com/ashleydavis
- https://github.com/data-forge
- https://github.com/data-forge-notebook
Skills
- Quickly building MVPs for startups
- Understanding how to get the most out of technology for business
- Developing technical strategies
- Management and coaching of teams & projects
- Microservices, devops, mobile and fullstack software development