BarChart值未更新

时间:2012-08-02 05:51:36

标签: wpf binding listbox datatemplate bar-chart

我正在尝试开发一个应用程序,其中我想在每三秒后生成一个随机数,将该数字插入到listBox中并使用DataTemplate将ListBox显示为矩形。

This仅供参考。

现在的问题是我使用了DispatcherTimer,它在3秒后“滴答”但矩形没有更新。

我发布了我的XAML和.cs代码。任何提示?

namespace ListBarGraph
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>

    public partial class MainWindow : Window
    {
        DispatcherTimer dt = new DispatcherTimer();
        DataFactory df = new DataFactory();

        public MainWindow()
        {
            InitializeComponent();
            dt.Tick += new EventHandler(dt_Tick);
            dt.Interval = new TimeSpan(0, 0, 3);
            dt.Start();

            this.PreviewKeyDown += new KeyEventHandler(MainWindow_PreviewKeyDown);
        }

        void dt_Tick(object sender, EventArgs e)
        {
            df.GetData();
        }
    }

    public class DataFactory
    {
        int number = 0;

        public IEnumerable<int> GetData()
        {
            Random random = new Random();
            number = random.Next(0, 100);
            return new int[] { 0, number };
        }
    }
}




<Window x:Class="ListBarGraph.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:ListBarGraph"
        Title="MainWindow" Height="350" Width="525">

   <Window.Resources>

       <ObjectDataProvider x:Key="someData" ObjectType="{x:Type local:DataFactory}" MethodName="GetData" />

      <DataTemplate x:Key="BarChartItemsTemplate">
         <Border Width="300" Height="50">
            <Grid>
               <Rectangle Fill="Red" StrokeThickness="2" Height="40" Width="{Binding}" HorizontalAlignment="Right" VerticalAlignment="Bottom">
                  <Rectangle.LayoutTransform>
                     <ScaleTransform ScaleX="1.5"/>
                  </Rectangle.LayoutTransform>
               </Rectangle>
         </Grid>
         </Border>
      </DataTemplate>

      <ItemsPanelTemplate x:Key="BarChartItemsPanel">
         <VirtualizingStackPanel IsItemsHost="True">
            <VirtualizingStackPanel.LayoutTransform>
               <TransformGroup>
                  <RotateTransform Angle="90"/>
                  <ScaleTransform ScaleX="-1" ScaleY="1"/>
               </TransformGroup>
            </VirtualizingStackPanel.LayoutTransform>
         </VirtualizingStackPanel>
      </ItemsPanelTemplate>

 </Window.Resources>

   <Grid>
      <ListBox ItemsSource="{Binding Source={StaticResource someData}}" ItemTemplate="{DynamicResource BarChartItemsTemplate}" ItemsPanel="{DynamicResource BarChartItemsPanel}"/>

   </Grid>

</Window>

0 个答案:

没有答案