新足迹

 找回密码
 注册

精华好帖回顾

· 有Sydney harbor 3.5倍大的林肯港Pt Lincoln (2011-1-5) pangpang · 精心编制的中国蔬菜耕种季节表---【新增拉丁文名,帮助想带种子的TX!】图片在76楼~~~ (2012-4-30) Icebergrose
· 读书半月谈(2010.02)- 读晋书乱弹系列3 - 我很丑可是我一点也不温柔,聊聊贾南风 (2010-2-15) Melbourner1978 · 火辣辣的柳州螺蛳粉 (2009-1-19) 明天晴天
Advertisement
Advertisement
查看: 2173|回复: 33

Silverlight 問題, 大俠們進! [复制链接]

2010年度奖章获得者

发表于 2010-10-18 09:32 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
ListBox binding datasource refresh 的問題。

簡化了的code如下。

Listbox

<ListBox Name="lbTimelog" Grid.Row="0">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBox Text="{Binding Start, Converter={StaticResource TimeFormatter}, Mode=TwoWay}" />
                        <TextBox Text="{Binding End, Converter={StaticResource TimeFormatter}, Mode=TwoWay}" />
                        <TextBox Text="{Binding Break, Mode=TwoWay}" />
                        <TextBlock Text="{Binding Total, Mode=TwoWay}" >
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

Domain Model

public class Timelog : INotifyPropertyChanged
    {

        private DateTime _start;
        public DateTime Start
        {
            get { return _start;}
            set
            {
                _start = value;
                RaisePropertyChanged("Start");
            }
        }

        private DateTime _end;
        public DateTime End
        {
            get { return _end; }
            set
            {
                _end = value;
                RaisePropertyChanged("End");
            }
        }

        private double _break;
        public double Break
        {
            get { return _break; }
            set
            {
                _break = value;
                RaisePropertyChanged("Break");
            }
        }

        public double Total
        {
            get
            {
                return DateFormat.GetDiff(End, Start);
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        void RaisePropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

Data Binding

lbTimelog.ItemsSource = log; //log = new ObservableCollection<Timelog>();


我想實現的功能是, 在UI上, 當用戶改了StartTime or EndTime, "Totoal" 應該自動刷新。 (Totoal 是個Computed property - value = End - Start)

在Xaml 的codebehind, 我有subscribe to datasource 的CollectionChanged event. 但這個event 只有當 new item added or removed from the collection 才trigger。 當你只是update existing item 時不會被trigger。

最後功能我是實現了。 通過 ReBound datasource. 就是每次我都 lbTimelog.ItemSource = log 一下。

但我認為這應該不是最好的方法, 理想中我是想功過TwoWay binding, 讓這個功能自動實現。

大家討論一下, 我silverlight也是新手, 還不太熟悉各項功能。。。
足迹 Reader is phenomenal. If you never used, you never lived 火速下载
Advertisement
Advertisement

发表于 2010-10-18 10:17 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我不懂,帮你顶一下吧

发表于 2010-10-18 11:15 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Let Javascript to do the job

2010年度奖章获得者

发表于 2010-10-18 11:20 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
it's a WP7 app :)

no js

发表于 2010-10-18 11:30 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2010-10-18 11:20 发表
it's a WP7 app :)

no js


Just joking

If you are using silverlight on web...
you can use javascript to communicate with silverlight....for example, create dropdown list as normal html, do anything, then use javascript to call silverlight

2010年度奖章获得者

发表于 2010-10-18 11:34 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
for this specific case, I'm only interested in the solution using TwoWay binding + collection change event approach. let's stick to it.
Advertisement
Advertisement

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

        private DateTime _start;
        public DateTime Start
        {
            get { return _start;}
            set
            {
                _start = value;
                RaisePropertyChanged("Start");RaisePropertyChanged("Total");
            }
        }

        private DateTime _end;
        public DateTime End
        {
            get { return _end; }
            set
            {
                _end = value;
                RaisePropertyChanged("End");RaisePropertyChanged("Total");
            }
        }

        private double _break;
        public double Break
        {
            get { return _break; }
            set
            {
                _break = value;
                RaisePropertyChanged("Break");

            }
        }

        public double Total
        {
            get
            {
                return DateFormat.GetDiff(End, Start);
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        void RaisePropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

评分

参与人数 1积分 +3 收起 理由
dalaohu + 3 我很赞同

查看全部评分

头像被屏蔽

禁止发言

发表于 2010-10-18 12:45 |显示全部楼层

comparing the changs of the count.collection

此文章由 iami 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 iami 所有!转贴必须注明作者、出处和本声明,并保持内容完整
psudo code
1. get the count of the collection

2. user perform one the tasks(add || remove || update)

3.get the count of the collection again and code the following blocks

if new_count.collection <> count.collection
{
   //do something
}

if new_count.collection == count.collection
{
   //do something
}

OR you may look thru the event handler window of the Collection object to see if there are specific built-in event handler methods to map those three operations you want your users performing on

if u using Linq to pull data out of its db, you'll have to save all the rows of data into a collection before get the correct number of its size.

if the data is saved into a VAR , you wont get the correct size(count) of the table.

not familiar with  .net stuff, just my two cents
签名被屏蔽

2010年度奖章获得者

发表于 2010-10-18 13:33 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 jerryclark 于 2010-10-18 13:36 发表
public class Timelog : INotifyPropertyChanged
    {

        private DateTime _start;
        public DateTime Start
        {
            get { return _start;}
            set
            {
           ...


That's probably it! I hope....

very busy today, will try it back home

thanks dude!
足迹 Reader is phenomenal. If you never used, you never lived 火速下载

2010年度奖章获得者

发表于 2010-10-18 13:35 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 iami 于 2010-10-18 13:45 发表
psudo code
1. get the count of the collection

2. user perform one the tasks(add || remove || update)

3.get the count of the collection again and code the following blocks

if new_count.collection  c ...


iami, 你也是coding的? 搞open source? 省藏不露啊!
足迹 Reader is phenomenal. If you never used, you never lived 火速下载

发表于 2010-10-18 14:30 |显示全部楼层
此文章由 jerryclark 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jerryclark 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2010-10-18 13:33 发表


That's probably it! I hope....

very busy today, will try it back home

thanks dude!


I haven't tested.  Not 100% sure it will work. Can you let us know if it works?

评分

参与人数 1积分 +3 收起 理由
dalaohu + 3 it's working!

查看全部评分

Advertisement
Advertisement

2010年度奖章获得者

发表于 2010-10-18 14:34 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 jerryclark 于 2010-10-18 15:30 发表


I haven't tested.  Not 100% sure it will work. Can you let us know if it works?


yea will do.

方向是對的, 感覺能行。主要就是要bubble up 一個event, 希望twoway binding 能收到。
and get job done automagically!
足迹 Reader is phenomenal. If you never used, you never lived 火速下载

2010年度奖章获得者

发表于 2010-10-18 14:55 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
It worked! like magic!


You are legend JerryClark!

发表于 2010-10-18 14:55 |显示全部楼层
此文章由 jerryclark 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jerryclark 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Thanks
头像被屏蔽

禁止发言

发表于 2010-10-19 22:17 |显示全部楼层
此文章由 iami 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 iami 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2010-10-18 02:35 PM 发表


iami, 你也是coding的? 搞open source? 省藏不露啊!


我上学时候两个平台,java和.net都用过,做功课和学习。
签名被屏蔽

发表于 2010-10-20 07:31 |显示全部楼层
此文章由 Dan.and.Andy 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Dan.and.Andy 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 iami 于 2010-10-19 23:17 发表


我上学时候两个平台,java和.net都用过,做功课和学习。


我不是学计算机的, 不过计算机的专业课还交这个? 好像在科班出身的人嘴里, java和.net不入流啊? 没听说有哪个学校当课交要考试的. 反到是社会办学的, 一把一把的培训.
Advertisement
Advertisement

2010年度奖章获得者

发表于 2010-10-20 08:00 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 Dan.and.Andy 于 2010-10-20 08:31 发表


我不是学计算机的, 不过计算机的专业课还交这个? 好像在科班出身的人嘴里, java和.net不入流啊? 没听说有哪个学校当课交要考试的. 反到是社会办学的, 一把一把的培训. ...


那象我这样,只学过Vb6该怎么办?
足迹 Reader is phenomenal. If you never used, you never lived 火速下载

发表于 2010-10-20 08:00 |显示全部楼层

回复 16# 的帖子

此文章由 小马识途 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小马识途 所有!转贴必须注明作者、出处和本声明,并保持内容完整
俺上学的时候是有Java的课的,大四选修课

发表于 2010-10-20 08:03 |显示全部楼层
此文章由 Dan.and.Andy 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Dan.and.Andy 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2010-10-20 09:00 发表


那象我这样,只学过Vb6该怎么办?


什么意思?

发表于 2010-10-20 08:04 |显示全部楼层
此文章由 Dan.and.Andy 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Dan.and.Andy 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 小马识途 于 2010-10-20 09:00 发表
俺上学的时候是有Java的课的,大四选修课


还是非限制性的选修课吧?

发表于 2010-10-20 08:06 |显示全部楼层

回复 20# 的帖子

此文章由 小马识途 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小马识途 所有!转贴必须注明作者、出处和本声明,并保持内容完整
嗯,这倒是,不过绝大多数人都会选的
Advertisement
Advertisement

2010年度奖章获得者

发表于 2010-10-20 08:12 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我就学了一年的It, 就vb6

跟学过java, net 的比都太不入流了, 哈哈

发表于 2010-10-20 08:17 |显示全部楼层

回复 22# 的帖子

此文章由 cdfei 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cdfei 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我也是vb6开始的,但工作中开始是用的delphi

发表于 2010-10-20 08:28 |显示全部楼层
此文章由 Dan.and.Andy 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Dan.and.Andy 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2010-10-20 09:12 发表
我就学了一年的It, 就vb6

跟学过java, net 的比都太不入流了, 哈哈


这你铁定了要跟老赵说

发表于 2010-10-20 09:02 |显示全部楼层
此文章由 jerryclark 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jerryclark 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 Dan.and.Andy 于 2010-10-20 07:31 发表


我不是学计算机的, 不过计算机的专业课还交这个? 好像在科班出身的人嘴里, java和.net不入流啊? 没听说有哪个学校当课交要考试的. 反到是社会办学的, 一把一把的培训. ...


啥是“科班出身”?

国内的计算机专业是Computer Science,不是Information Technology。

发表于 2010-10-20 09:08 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我本科毕业毕业论文是研究jvm,那是1996年,中国知道这个东西的不过几百个人。

如果毕业坚持做这个,现在都不知道在干啥了。
Advertisement
Advertisement

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


啥是“科班出身”?

国内的计算机专业是Computer Science,不是Information Technology。


WOW, 我也不知道, 应该叫计算机及相关学科吧?

请教一下, 设置Information Technology 学什么呢?

2010年度奖章获得者

发表于 2010-10-20 09:12 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
亂碼下兄還真的是地道的科班出生啊。

发表于 2010-10-20 09:16 |显示全部楼层

回复 26# 的帖子

此文章由 小马识途 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小马识途 所有!转贴必须注明作者、出处和本声明,并保持内容完整
你太厉害了,96年就开始研究jvm,怎么后来转了?

发表于 2010-10-20 09:33 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 小马识途 于 2010-10-20 10:16 发表
你太厉害了,96年就开始研究jvm,怎么后来转了?


后来进银行作大机了,java没再动过。

发表回复

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

本版积分规则

Advertisement
Advertisement
返回顶部