当列表框通过ObservableCollection绑定时,如何使文本可更改

时间:2014-05-30 08:07:48

标签: c# xaml windows-phone-7 windows-phone-8

我正在开发一个窗口手机应用程序。其中我有一个列表框,模板的视图有一个时间字段。 我已将一个可观察的集合绑定到列表中。我的问题是我绑定到模板的时间应该随着计时器滴答而改变。我必须显示所有计时器运行。 当它通过可观察的集合绑定时,我该如何执行此操作。

我怎么能让它每秒都改变一次。将可观察集合通知每一秒都是一个好主意。或者任何想法都可以为我提供良好的建议。

1 个答案:

答案 0 :(得分:0)

试试这个

XAML:

        <ListBox x:Name="lstData">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Data1}" Margin="20"></TextBlock>
                        <TextBlock Text="{Binding Data2}" Margin="20"></TextBlock>
                        <TextBlock Text="{Binding Data3}" Margin="20"></TextBlock>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

CS:

ObservableCollection<Data> obs = new ObservableCollection<Data>();
        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            obs.Add(new Data("Start", "Time :", "0"));
            lstData.ItemsSource = obs;
            LoadTimer();
        }

        public void LoadTimer()
        {
            int sec = 0;
            Timer timer = new Timer((obj) =>
            {
                Dispatcher pageDispatcher = obj as Dispatcher;

                pageDispatcher.BeginInvoke(() =>
                {
                    sec++;
                    obs[0] = new Data("Changing", "Time :", sec.ToString());
                });

            }, this.Dispatcher, 1000, 1000);
        }

        public class Data
        {
            public string Data1 { get; set; }
            public string Data2 { get; set; }
            public string Data3 { get; set; }

            public Data() { }

            public Data(string Data1, string Data2, string Data3)
            {
                this.Data1 = Data1;
                this.Data2 = Data2;
                this.Data3 = Data3;
            }
        }