2012-08-02 6 views
0

3 초마다 임의의 숫자를 생성하고 listBox에 해당 숫자를 삽입하고 ListBox를 사각형으로 표시하는 응용 프로그램을 개발하려고합니다.BarChart 값이 업데이트되지 않습니다.

This입니다.

이제 문제는 3 초 후 '틱'하지만 사각형이 업데이트되지 않은 DispatcherTimer를 사용했다는 것입니다.

내 XAML 및 .cs 코드를 게시하고 있습니다. 어떤 힌트? ObjectProvider에 의해 만들어진으로

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은 당신의 코드 숨김, 완전히 다른 인스턴스를 생성하는 UI를 바인드되어 있지하는 동안, DataFactory의 한 인스턴스에 바인딩됩니다.

시작해보십시오. 당신의 XAML에서 ObjectProvider을 제거하고 ListBox에 변경 : dt_Tick 내부

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

는 다음을 수행 근무하고있다

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

자사의 황소 eye..it는 TON을 fine..thanks! –

관련 문제