public Uri Uri { get; set; }\r
//public DirectoryInfo LocalInfo { get; set; }\r
\r
- DirectoryRecord _parent;\r
+\r
+ private DirectoryRecord _parent;\r
+ public DirectoryRecord Parent\r
+ {\r
+ get { return _parent; }\r
+ private set { _parent = value; }\r
+ }\r
\r
public bool Added { get; set; }\r
public bool Removed { get; set; }\r
/// </summary>\r
public bool? IsChecked\r
{\r
- get { return _isChecked; }\r
+ get\r
+ {\r
+ if (_directories.Count==0)\r
+ return _isChecked;\r
+ \r
+ if (_isChecked == true) \r
+ return _isChecked;\r
+ //Check children to decide whether to display a clear (false) or gray (null)\r
+ return _directories.Any(d => d.IsChecked == true) ? null : (bool?)false;\r
+ }\r
set { this.SetIsChecked(value, true, true); }\r
}\r
\r
if (value == _isChecked)\r
return;\r
\r
- _isChecked = value;\r
+ _isChecked = value??false;\r
\r
//If the value is null both Added and Removed should be False\r
- Added = _isChecked??false;\r
- Removed = !(_isChecked??true);\r
+ Added = _isChecked.Value;\r
+ Removed = !(_isChecked.Value);\r
\r
- if (updateChildren && _isChecked.HasValue)\r
+ if (updateChildren )\r
this.Directories.Apply(c => c.SetIsChecked(_isChecked, true, false));\r
\r
if (updateParent && _parent != null)\r
\r
void VerifyCheckState()\r
{\r
+ RaisePropertyChangedEventImmediately("IsChecked");\r
+ return;\r
bool? state = null;\r
for (var i = 0; i < this.Directories.Count(); ++i)\r
{\r
public List<DirectoryRecord> Directories\r
{\r
get { return _directories; }\r
- set { _directories= value; }\r
+ set\r
+ {\r
+ _directories= value;\r
+ foreach (var dir in value)\r
+ {\r
+ dir.Parent = this;\r
+ }\r
+ }\r
}\r
\r
public DirectoryRecord()\r
get\r
{\r
if (ObjectInfo != null)\r
- return ObjectInfo.Name.Split('/').Last();\r
+ return Uri.UnescapeDataString(ObjectInfo.Name.ToString().Split('/').Last());\r
return _displayName;\r
}\r
set { _displayName = value; }\r