新足迹

 找回密码
 注册

精华好帖回顾

· 纪念澳洲人最爱戴的第一夫人Margaret Whitlam (更新:前总理Gough Whitlam去世,98岁高龄) (2012-3-18) patrickzhu · 大头怀念的北京小吃(十一)-- 稻香村的牛舌饼 (2012-11-20) datou2z
· 上海夏天 (2010-5-15) xblues · 登陆一年 (2007-1-22) daomeidan1234
Advertisement
Advertisement
查看: 1990|回复: 16

这段代码哪位高人给解释一下? [复制链接]

头像被屏蔽

禁止发言

发表于 2010-9-16 12:22 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
private IObservable<SW.DragDropKeyStates> GetKeyStatesChanged()
        {
            return
                Observable.Merge(
                // before drag starts listen only root visual
                    from _ in
                        Observable.Merge(Observable.Return(new Unit()),
                                         _itemDragCompleted.IgnoreAll())
                    from keyStates in
                        Observable
                            .Return(Application.Current)
                            .ObserveOnDispatcher()
                            .SelectMany(app => app.RootVisual.GetKeyStateChangedAlways(_keyStates))
                            .TakeUntil(_itemDragStarted)
                    select keyStates,

                // after drag starts listen to root visual and all siblings
                    from _ in _itemDragStarted
                    from keyStates in
                        Observable
                            .Return(Application.Current)
                            .ObserveOnDispatcher()
                            .SelectMany(app => app.RootVisual.GetKeyStateChangedOnSelfAndSiblingsAlways(_keyStates))
                            .TakeUntil(_itemDragCompleted)
                    select keyStates);
        }

主要是    from _ in 里面的 _
Advertisement
Advertisement

发表于 2010-9-16 12:24 |显示全部楼层
此文章由 zn7726 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 zn7726 所有!转贴必须注明作者、出处和本声明,并保持内容完整
帮顶, 没见过这语言

退役斑竹

发表于 2010-9-16 12:29 |显示全部楼层
此文章由 garysu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 garysu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
sliverlight

发表于 2010-9-16 12:30 |显示全部楼层
此文章由 未名湖 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 未名湖 所有!转贴必须注明作者、出处和本声明,并保持内容完整
也像其他winform里面的

2010年度奖章获得者

发表于 2010-9-16 12:31 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
這部就是C#嗎

from _ in _ 是comments 吧, 你沒copy好吧?

发表于 2010-9-16 12:33 |显示全部楼层
此文章由 cynosure 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cynosure 所有!转贴必须注明作者、出处和本声明,并保持内容完整
好像是LINQ的语法,看看这个:http://msdn.microsoft.com/en-us/library/bb383978.aspx (from clause (C# Reference))
Advertisement
Advertisement

发表于 2010-9-16 12:34 |显示全部楼层
此文章由 findcaiyzh 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 findcaiyzh 所有!转贴必须注明作者、出处和本声明,并保持内容完整
应该是LINQ吧。

不过from _ in中的_是什么新技术,还是变量名,还是vb中的换行符,就不知道了。

2010年度奖章获得者

发表于 2010-9-16 12:39 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
跟正一下。

from _ in 沒有錯, 但加個indenting 更好看清。

from _ in _itemDragStarted
                    from keyStates in
                        Observable
                            .Return(Application.Current)
                            .ObserveOnDispatcher()
                            .SelectMany(app => app.RootVisual.GetKeyStateChangedOnSelfAndSiblingsAlways(_keyStates))
                            .TakeUntil(_itemDragCompleted)
                    select keyStates);

“—” 應該是統配符 (我還真沒這樣用過)

這代碼就是 個double loop

foreach (var item in _itemDragStarted)
{
   foreach (var key in keyStates)
   { ... }
}
足迹 Reader is phenomenal. If you never used, you never lived 火速下载
头像被屏蔽

禁止发言

发表于 2010-9-16 12:43 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
应该是linq,但是我搜这个 "_" 根本搜不到什么

2010年度奖章获得者

发表于 2010-9-16 12:48 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 linkspeed 于 2010-9-16 12:43 发表
应该是linq,但是我搜这个 "_" 根本搜不到什么


這是C# 裡的linq query ,linq本身又不是語言。

總之這人寫的不好, 我特反感把一大堆東西寫在一個return 裡, debug 都困難。
足迹 Reader is phenomenal. If you never used, you never lived 火速下载

发表于 2010-9-16 13:11 |显示全部楼层
此文章由 cynosure 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cynosure 所有!转贴必须注明作者、出处和本声明,并保持内容完整
LINQ可以算是一种DSL语言
Advertisement
Advertisement
头像被屏蔽

禁止发言

发表于 2010-9-16 13:41 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
>總之這人寫的不好, 我特反感把一大堆東西寫在一個return 裡, debug 都困難。

我同意。

这个是silverlight toolkit里面的代码。

2010年度奖章获得者

发表于 2010-9-16 14:08 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 linkspeed 于 2010-9-16 13:41 发表
>總之這人寫的不好, 我特反感把一大堆東西寫在一個return 裡, debug 都困難。

我同意。

这个是silverlight toolkit里面的代码。


toolkit 都比较烂
好多是啊三写的

当年ajax.net toolkit source code那叫一个烂
足迹 Reader is phenomenal. If you never used, you never lived 火速下载
头像被屏蔽

禁止发言

发表于 2010-9-17 08:57 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
private IObservable<IEvent<ItemDragEventArgs>> GetItemDragStarting()
        {
            return
                from mouseLeftButtonDown in this.GetMouseLeftButtonDownAlways().ObserveOnDispatcher()
                let originalSource = (UIElement)mouseLeftButtonDown.EventArgs.OriginalSource
                let offset = GetOffset(mouseLeftButtonDown.EventArgs, originalSource)
                from dragStarted in
                    Application.Current.RootVisual
                        .GetMouseMove()
                        .SkipWhile(moveEvent =>
                        {
                            Point point = GetOffset(moveEvent.EventArgs, originalSource);
                            return Math.Abs(point.X - offset.X) < SW.SystemParameters.MinimumHorizontalDragDistance && Math.Abs(point.Y - offset.Y) < SW.SystemParameters.MinimumVerticalDragDistance;
                        })
                        .Take(1)
                        .TakeUntil(Application.Current.RootVisual.GetMouseLeftButtonUpOnSelfAndSiblingsAlways())
                let itemsControl = GetItemsControlAncestor(originalSource)
                where itemsControl != null
                let itemContainer = GetItemContainerAncestor(itemsControl, originalSource)
                where itemContainer != null
                let itemIndex = IndexFromContainer(itemsControl, itemContainer)
                let data = ItemFromContainer(itemsControl, itemContainer)
                where data != null
                select
                    Event.Create(
                        this,
                        new ItemDragEventArgs
                        {
                            DragDecoratorContentMouseOffset = offset,
                            Data = new SelectionCollection() { new Selection(itemIndex, data) },
                            DragSource = itemsControl,
                            AllowedEffects = this.ReadLocalValue(AllowedSourceEffectsProperty) == DependencyProperty.UnsetValue ? GetAllowedEffects(itemsControl) : (SW.DragDropEffects)this.GetValue(AllowedSourceEffectsProperty),
                            DragDecoratorContent =
                                new Image
                                {
                                    Source = new WriteableBitmap(itemContainer, new TranslateTransform())
                                },
                            Handled = false,
                            RemoveDataFromDragSourceAction = (args) => RemoveDataFromItemsControl(itemsControl, args.Data)
                        });
        }

继续,看来这个高人不少。
                from mouseLeftButtonDown in this.GetMouseLeftButtonDownAlways().ObserveOnDispatcher()

ObserveOnDispatcher()是干什么用的?
我google了半天居然没有一个像样的解释

发表于 2010-9-17 09:26 |显示全部楼层
此文章由 rogerk 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 rogerk 所有!转贴必须注明作者、出处和本声明,并保持内容完整
真的看不懂现在各种语言的发展方向。。

你说,把一个double loop写成这么个鸟样子,这语言算是更方便使用了呢,还是更复杂了呢?

评分

参与人数 1积分 +2 收起 理由
Dan.and.Andy + 2 我很赞同

查看全部评分

发表于 2010-9-17 09:30 |显示全部楼层
此文章由 Dan.and.Andy 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Dan.and.Andy 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 linkspeed 于 2010-9-17 08:57 发表
private IObservable GetItemDragStarting()
        {
            return
                from mouseLeftButtonDown in this.GetMouseLeftButtonDownAlways().ObserveOnDispatcher()
                let origina ...


单独看应该没有什么意义 -

ObserveOnDispatcher 应该是 customized observer design pattern. 通知与这个mouse事件相关联的object去自动处理event或者更新, 事件冒泡中监听事件源的

然后一层层的找object, 找到 itemindex 和捆绑的data继续处理.

没有批评的意思, 微软真是退化了, 又在走老路, 处理一个事件动作竟如此麻烦, 语法如此晦涩. 想起了以前MFC时代的windows DNA, 太乱了,灾难了, 又有当时先进的java后推出.net, 什么时候推倒.net 重来?
Advertisement
Advertisement
头像被屏蔽

禁止发言

发表于 2010-9-17 10:13 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这个号称是解决异步计算的方法。。。。
在RX extension里面。

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部