2012-08-02 53 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