2011-04-11 91 views
1

我只是随便用WPF戏,和我在与绑定一个问题...的数据绑定WPF DataGrid中(C#4.0)

这里是我到目前为止的代码...

的窗口XAML:

<Window x:Class="FRC.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Registry Cleaner - By Martin Milan." MinHeight ="350" Height ="350" MinWidth="525" MaxHeight="700" Width="350" Background="#FFC199AA" > 
    <DockPanel Background="#FFD9E1E8" Margin="10"> 
     <Grid DockPanel.Dock="Top" > 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="100" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition /> 
      </Grid.RowDefinitions> 
      <Label Grid.Column="0" Grid.Row="0" HorizontalAlignment="Right" >Filepath:</Label> 
      <TextBox Grid.Column="1" HorizontalAlignment="Stretch" Name="txtFilePath" VerticalAlignment="Stretch" /> 
     </Grid> 
     <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Right" > 
      <Button Name="butScan" Content="Scan" MinWidth="75" Margin="0,0,10,5" /> 
      <Button Name="butDelete" Content="Remove RegKeys" Margin="0,0,5,5" Click="butDelete_Click" /> 
     </StackPanel> 
     <ScrollViewer Margin="0,0,0,5"> 
      <DataGrid AutoGenerateColumns="False" Name="dgActions" CanUserAddRows="False" CanUserDeleteRows="False" > 
       <DataGrid.Columns> 
        <DataGridTextColumn Binding="{Binding RegKeyPath, Mode=OneWay}" Header="Registry Key" Width="*"/> 
        <DataGridCheckBoxColumn Binding="{Binding DeletePath, Mode=TwoWay}" Header="Can I delete key?" 
              MinWidth="110" Width="110" /> 
       </DataGrid.Columns> 
      </DataGrid>  
     </ScrollViewer> 

    </DockPanel> 
</Window> 

背后的窗口代码:

namespace FRC 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     protected List<RegistryAction> mRegistryActions = new List<RegistryAction>(); 

     public MainWindow() 
     { 
      InitializeComponent(); 
      RegistryAction oRegAction = new RegistryAction(); 
      oRegAction.DeletePath = true; 
      oRegAction.RegKeyPath = "A test value"; 
      mRegistryActions.Add (oRegAction); 
      dgActions.DataContext = mRegistryActions; 
      dgActions.ItemsSource = mRegistryActions; 

     } 

     private void butDelete_Click(object sender, RoutedEventArgs e) 
     { 
      RegistryAction oRegAction = new RegistryAction(); 
      oRegAction.DeletePath = true; 
      Random rGen = new Random(); 

      oRegAction.RegKeyPath = "A test " + rGen.Next(100).ToString(); 
      mRegistryActions.Add(oRegAction); 

     } 


    } 
} 

的RegistryAction类:

namespace FRC 
{ 
    public class RegistryAction 
    { 
     public string RegKeyPath { get; set; } 
     public bool DeletePath { get; set; } 
     public RegistryAction() 
     { 
      this.DeletePath = false; 
      this.RegKeyPath = ""; 
     } 
    } 
} 

基本上。它设置RegistryAction对象的列表,并将其与DataGrid绑定。然而,我发现,无论何时我在butDelete_Click中运行代码,虽然列表已更新,但网格上的内容并未更新。

总之,任何人都可以发现我错过了什么吗?

Martin。

回答

2

mRegistryActions应该ObservableCollection

protected ObservableCollection<RegistryAction> mRegistryActions = new ObservableCollection<RegistryAction>(); 
+0

完全排序的问题一次犯规 - 欢呼声。应该想到,如果网格没有听到收集中的变化,那么收集可能不是在喊他们。 +1并接受。 – 2011-04-11 12:02:00