【问题标题】:Custom class for lists [closed]列表的自定义类[关闭]
【发布时间】:2015-12-31 02:36:14
【问题描述】:

我已经构建了一个自定义日历控件(如 google 日历和 Outlook 日历)

我想添加处理事件的功能(添加、删除等)。我已经有了它,但我希望它尽可能通用。

我的代码目前的样子:

myCalendar.Events.Add(myEvent);
myCalendar.Draw //this adds all the events to the calendar

我认为看起来更通用的示例:

myCalendar.Events.Add(myEvent);
myCalendar.Events.Remove(unwantedEvent);
myCalendar.Events.Draw

我的问题。 是第二个 code-sn-p 最佳实践还是我应该使用一个单独的类来处理绘图等。 (我目前有)

如果第二个 sn-p 更好,我该怎么做?

我尝试过的一种方法的粗略示例(让您了解我想要完成的工作)

public _Events Events = new _Events();

public class _Events
{
    public List<Event> Events = new List<Event>();

    void Add(...)
    {
        //Add event to Events
    }

    void Clear()
    {
        ...
    }
}

public class Event
{
    public String Title { get; set; }
}

上面代码的问题是我希望能够像这样返回一个默认值......

listOfEvents =  myCalendar.Events

免责声明:我已经尝试找到解决方案,但找不到合适的关键字来找到它

【问题讨论】:

  • 在语义上,您是在绘制事件,还是在绘制日历?对我来说,CalendarEvent 将是没有“绘图”概念的域对象,而另一个类,例如 UI 层中的 CalendarRenderer,将接受 Calendar 并具有手段,这对我来说是有意义的画出来。
  • myCalendar 是 Windows 窗体的用户控件吗?
  • @David 我正在将事件绘制到日历上
  • 我还建议Event 应该是一个抽象类,这样您就可以创建MeeingEventBirthdayEvent 等,允许渲染器根据类型进行不同的渲染。
  • 我无法想象“绘图事件”是什么意思......我希望日历在添加/删除一个事件时简单地更新新事件而无需任何额外操作。

标签: c# class methods


【解决方案1】:

我不确定如何处理您的代码 sn-p,因此我提取了一些代码,用于存储渲染到视图的自定义对象。您可以使用类中的代码来处理使用访问器时如何返回数据。

using System.ComponentModel;    
public abstract class DiagramObject : INotifyPropertyChanged
{
    //the actual variable
    private string _name;

    //how the variable is accessed and set
    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            OnPropertyChanged("Name");
        }
    }

    //
    public string AbbreviatedName
    {
        get
        {
            if (_name.Length>=1)
            {
                return _name.Substring(0, 1);
            }
            else
            {
                return "NA";
            }        
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

然后通过创建一个可观察的集合并初始化,这些可以访问以用于显示。如果您使用的是 WPF,则可以将其绑定到列表框。

using System.Collections.ObjectModel;
private ObservableCollection<DiagramObject> _objects;
public ObservableCollection<DiagramObject> Objects
{
    get { return _nodes ?? (_nodes = new ObservableCollection<Node>()); }
}

public MainClass
{
    _objects = new ObservableCollection<DiagramObject>(constructor that makes the objects);
}

我从 https://github.com/High-Core/WPFSamples/tree/master/src/WPFSamples/Samples 为我的项目提取了大量代码。这是由制作它的人添加的,并且有很多非常有趣的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2019-07-20
    • 2013-03-24
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多