菜鸟老了 2011-06-23 22:28
谢谢哈,看了prism 里面的实现。
Curry 2011-06-23 15:56
@菜鸟老了
ICommandSource 中有ICommand接口的定义,ICommand中有事件CanExecuteChanged的定义,那么只要在ICommandSource 中Command赋值的时候进行注册就可以了,如果有多次赋值,记得先清理掉之前的注册,否则会内存泄露。
菜鸟老了 2011-06-21 15:10
请问下楼主,ICommandSource怎么注册CanExecuteChanged来进行实时验证?
Lee's Blog 2011-04-13 13:12
不错,学习了。
只是找工的 2011-03-31 16:36
楼主,求一例子看看代码!
Alen在西安 2011-03-11 10:34
不错,比原版的看着舒服多了!谢谢啊
dino623-2 2010-12-31 22:14
通常都觉得sl的效率比WPF高很对,图形方面
李永京 2010-12-22 22:28
@Curry
是我偷偷放的...
Curry 2010-12-22 16:43
@地狱门神
你的判断是正确的,确实是因为这个的原因,当时字符写不进用了偷懒的方法。
byte* pBackBuffer = (byte*)_writeableBitmap.BackBuffer;
// Find the address of the pixel to draw.
pBackBuffer += row * _writeableBitmap.BackBufferStride;
pBackBuffer += column * 4;
pBackBuffer[0] = color.B;
pBackBuffer[1] = color.G;
pBackBuffer[2] = color.R;
pBackBuffer[3] = color.A;
改成如下这样。
Clingingboy 2010-12-22 14:00
@Curry
1.画背景时,不要一个一个像素画,批量画.并且每次都需要刷新.
因为刷新时没刷背景色,导致颜色变了.
2.减少Unlock和lock,把画背景和粒子放在一个区域里面.
当然我也是参考别人的,找到资源是关键哈,呵呵
http://msdn.microsoft.com/zh-cn/magazine/cc534995.aspx
Curry 2010-12-22 13:40
不好意思,我发这篇博客的时候没有打算放到首页,只是为自己私人记录看看的,难道昨天晚上神智不清醒所致,给浪费时间的同学到个歉了。已经从首页拿下了。
偶卖糕的 2010-12-22 11:27
egg pain 的程序员真多,哈哈
另外,如果有黑色点,你把那个点再画成蓝色不就行了么,我以前在appleII上面就这样干的,不知道现在是不是先进点了
地狱门神 2010-12-22 10:33
我看了一些你的代码,发现问题在于你声明的颜色都是用的long类型,在C#里,long是指Int64。把所有的long都改成UInt32就可以解决变黑的问题。因为你相当于在要写入4个字节的地方写了8个字节,且其中后面的4个字节都是0,这样就变黑了。
另外,SetPixel里面,不应该把指针转换成整数,可以写成这样
IntPtr pBackBuffer = _writeableBitmap.BackBuffer;
Rolf 2010-12-22 10:31
我也是蛋痛把那带源码的AS代码移植到C++上了,效果还可以:)
rexzhou 2010-12-22 10:26
new Random().NextDouble()不就是0到1的小数了么
Jertun 2010-12-22 10:15
我就猜到肯定有人忍不住要写,不过也没必要搞到3点钟啊,身体最重要,其他的都是浮云......
xiao张 2010-12-22 09:56
posted @ 2010-12-22 02:56
要注意休息好!
二叉树 2010-12-22 09:46
沙发,楼主V5
Curry 2010-06-10 23:14
晕,居然没把模型放上来,以后和别人谈WPF前,先把自己写的看遍,同时看出来,自己的写作水平真的有限,写的还很模糊。
▄︻┻┳═一 2010-05-13 14:30
楼主分析的很透彻,学习了!
Motto(Momo) 2010-05-07 14:28
模仿,超越,创新~~~~
bray 2010-04-26 10:09
楼主深入本质探究..赞!
helloj2ee 2010-04-04 10:27
顶!必须的
Silenus-G 2010-04-03 09:21
嗯嗯,这个是大家共同的“爱好” - -!
yingql 2010-04-02 15:01
写的好,抄的也好~
韦恩卑鄙 v-zhewg @waynebaby 2010-04-02 14:36
抄的好
"老子就是抄 不怕难听"的态度也好!
清海扬波 2010-04-02 13:55
程序员的事, 能算抄么?
Curry 2010-04-02 13:41
@helloj2ee
晕,这个我还真是当笔记随便记录下的。难看懂?文字组织水平还要提高吧,比不得你这个当老师的,呵呵。
Curry 2010-04-02 13:40
@活雷锋
呵呵,以后和老板可以这么说。
@BreezeWoo
不过我确实是抄袭在前,不能说借鉴了提高了就没有了原来的功劳。
@机枪兵
我也是这个意思,其实就算你改了一个名字又算什么呢?如果你知道用处和原理,就没必要重复造轮子了吧,用抄袭更节省时间,还能有更多的时间和精力学其他东西。
@Julin Rain
因为这个应用只是在LineChart上的,不知道您有没有什么更好的建议?除了CurryChart,哈哈。
Julin Rain 2010-04-02 13:20
LineChartService的定位太窄了,以后不是还得出个PieChartService,PointsChartService,StockChartService?
干脆叫个CurryChart得勒 哈哈
机枪兵 2010-04-02 13:08
在设计一个新东西前,肯定有借鉴、观摩、引用等过程的,要不然怎么叫青出于蓝胜于蓝呢。如果只是把人家的命名空间一改就拿去发布,那才叫抄袭,呵呵。
BreezeWoo 2010-04-02 12:58
互相学习,不叫抄,多不好多词。
活雷锋 2010-04-02 12:09
这叫 二次创新~~!
Curry 2010-04-02 11:30
@NanCo
谢谢支持,其实每个人每天都有大量的抄袭,只是融入了自己的思想,感觉不到罢了。
NanCo 2010-04-02 10:46
抄的相当专业~~~~~~看得很爽。。。。
helloj2ee 2010-03-17 01:58
很久没有看到Curry的大作了。但是实话Curry的东西 最难看懂了。有的时候感觉 就像你自言自语一般 Curry什么时候能够为我等这样的忠实读者着想一下 写的时候考虑一下读者的感受 呵呵 只是建议啊
Curry 2010-03-05 08:52
@周永恒
期待咯...
周永恒 2010-03-04 15:47
文章很长,看着有点晕...
我以前写过一个简单的BindingEngine,有机会拿出来谈谈,呵呵。
helloj2ee 2010-02-20 10:18
一不小心 转到Curry这儿来了。服了,真服了。又是一篇又长又深的文章,Curry是最后一定要用Windb的
Curry 2010-02-10 10:40
@申飞
@grapeot
谢谢大家的支持。
申飞 2010-02-10 00:35
文章写得很好。分析也是一步一步的,思路清晰。
grapeot 2010-02-09 17:22
很惊艳的文章,试图循着先驱的角度重新发明一遍经典的技术。这也是创新呀~再看到缜密科学的思维方法,对各种工具的娴熟运用,忍不住先赞美一番,然后细细品读。
Curry 2010-02-09 16:53
@Ivony...
例如Notify可以选择包装对象(参考透明代理),Set可以采取反射
————————————————
我后面也是通过类似的方式。其实我在看WPF源码的过程中发现有点迷失自我,按着他的方式去思考,更直观的说是从代码来反推它当时的需求或原因。以至于花了很多时间感觉也没对自己有太大帮助(帮助是有的,只是和所花的时间比起来就微不足道了)。
你提出的方法,我估计是智商和洗脑的集合,不过确实解了我的一些困惑。
Curry 2010-02-09 16:29
@Ivony...
方法论哦,呵呵,确实应该是要把问题抽象化后解决,我也在努力加油向这个目标靠近。非常感谢您的回复,刚才感谢打成感觉了。您的评论对我启发很大。再说声谢谢。
Curry 2010-02-09 16:27
@陛下
写的长只能说文笔不好,需要写这么长才能把东西讲下来,不过老兄你的文笔真的顶呱呱。哈哈。
Ivony... 2010-02-09 15:18
[quote]Curry:
@Ivony...
首先感觉Ivony老大的大驾光临和回复。
您说的对的,确实是要两个对象之间的沟通,两个对象也确实是要约定,接口或继承类型。
我也确实想表达这个意思:两个对象刚开始没有接口,沟通麻烦,引出接口进行约定,沟通主要在属性的变更,所以问题反映到如何侦测属性变化,在侦测过程中如何防止内存泄露,和如何使一个类不通过接口便能沟通(做个桥接的沟通器)以及如何更好的节约内存。
看样子确实表达能力不行啊,能不能帮忙指出下是哪几句令您感觉我是在数据类型上产生的问题,我马上改。
[/quote]
一楼是我自己删的,因为感觉不在聊同一件事儿。
其实我想表达的是什么呢?问题的本质是什么,问题的本质在于两个对象之间数据的同步,这是重要的,至于采取什么样的方法,则是次要的。不应该一开始就引入实际的实现来考虑问题。
所以问题很简单,数据需要在两个对象之间同步,需要有一种东西来描述他们之间的关系。我们现在假定这个东西就是Binding对象。那么很简单,结构就是:
[code=]
对象A <-> Binding <-> 对象B
[/code]
然后才是具体的实现,我们可以看到对象A和B都与Binding之间有双箭头,这意味着两个操作:Notify和Set。即:
[code=]
对象A --Notify-> Binding --Set-> 对象B
对象A <-Set-- Binding <-Notify-- 对象B
[/code]
那么对象A和B都必须具备这两个功能(Notify和Set),一般情况下,功能的抽象我们可以用接口来实现:
[code=csharp]
interface IDependentObject
{
event EventHandler<PropertyChangeEventArgs> NotifyPropertyChanged;
void SetProperty( string propertyName, object value );
}
[/code]
注意这里的event和method都是解决问题的一种方案,事实上我们有无数种方案,例如Notify可以选择包装对象(参考透明代理),Set可以采取反射。
说的有点儿玄哦,要理解的确要花一点时间。
其实我的意思就是,解决问题时,不要急于将问题具体化,先在抽象的层面将问题考虑清楚。例如Notify和Set这就是抽象的东西。当问题的全景全部呈现后,将这些抽象的东西落到实处(例如event和method),这是更有效解决问题的方法。
这样远比先找到一个不怎么好的解决方案,再去进行优化要简便的多,当然这也对个人的能力有更高的要求。
陛下 2010-02-09 14:56
写了这么多,真够努力的啊!支持一下,即便我那么浮躁没怎么认真的读:)
Curry 2010-02-09 14:07
晕...怎么一楼被删除了。@@!
Curry 2010-02-09 13:58
@Ivony...
首先感觉Ivony老大的大驾光临和回复。
您说的对的,确实是要两个对象之间的沟通,两个对象也确实是要约定,接口或继承类型。
我也确实想表达这个意思:两个对象刚开始没有接口,沟通麻烦,引出接口进行约定,沟通主要在属性的变更,所以问题反映到如何侦测属性变化,在侦测过程中如何防止内存泄露,和如何使一个类不通过接口便能沟通(做个桥接的沟通器)以及如何更好的节约内存。
看样子确实表达能力不行啊,能不能帮忙指出下是哪几句令您感觉我是在数据类型上产生的问题,我马上改。
Curry 2009-12-31 14:07
感谢您的回复和意见。谢谢