#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

106 lines
2.2 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using SharpDevelop.XamlDesigner.Dom.UndoSystem;
namespace SharpDevelop.XamlDesigner.Dom
{
public class DesignProperty : ViewModel, IHasContext
{
internal DesignProperty(DesignItem item, MemberId member)
{
ParentItem = item;
MemberId = member;
if (Utils.IsCollection(member.ValueType)) {
value = new DesignItemCollection(item.Context, member.ValueType);
}
}
public MemberId MemberId { get; private set; }
public DesignItem ParentItem { get; private set; }
public DesignContext Context
{
get { return ParentItem.Context; }
}
DesignItem value;
public DesignItem Value
{
get { return value; }
set { SetValue(value); }
}
public object ValueObject
{
get
{
if (Value != null) {
return Value.Instance;
}
var propertyId = MemberId as PropertyId;
if (propertyId != null && ParentItem.InstanceMatchType) {
return propertyId.Descriptor.GetValue(ParentItem.Instance);
}
return null;
}
}
public bool IsSet
{
get { return Value != null; }
}
public DesignItemCollection Collection
{
get { return Value as DesignItemCollection; }
}
public void Reset()
{
SetValue(DependencyProperty.UnsetValue);
}
public void SetValue(object value)
{
var valueItem = value as DesignItem;
if (valueItem == null) {
//var text = value as string;
//if (text != null &&
// !MemberId.ValueType.IsAssignableFrom(typeof(string)) &&
// MemberId.ValueSerializer != null &&
// MemberId.ValueSerializer.CanConvertFromString(text, null)) {
// value = MemberId.ValueSerializer.ConvertFromString(text, null);
//}
if (value != DependencyProperty.UnsetValue) {
valueItem = Context.CreateItem(value);
}
}
Context.UndoManager.Execute(new PropertyAction(this, valueItem));
}
internal void SetValueCore(DesignItem value)
{
this.value = value;
XamlOperations.SetValue(this);
RaisePropertyChanged("Value");
RaisePropertyChanged("ValueObject");
RaisePropertyChanged("Collection");
RaisePropertyChanged("IsSet");
}
internal void ParserSetValue(DesignItem value)
{
this.value = value;
}
}
}