2012-08-02 56 views
0

我正在尝试开发一个应用程序,其中我希望在每三秒钟后生成一个随机数,将该数字插入到列表框中并使用DataTemplate将该列表框显示为矩形。BarChart值不更新

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

你的XAML必然的DataFactory一个实例由ObjectProvider创建的,而您的代码隐藏共创另一个实例,该UI不绑定。

试试这个让你开始。在XAML中,除去ObjectProvider和改变你的ListBox到:

<ListBox ItemsSource="{Binding}" ... 

里面dt_Tick,这样做:

this.DataContext = df.GetData(); 
+0

它是一个公牛eye..it已经工作fine..thanks一吨! – 2012-08-02 06:16:05