WPF控件不是从自定义方法填充的

时间:2014-04-09 12:09:23

标签: c# wpf wpfdatagrid

在我的WPF C#项目中,我在MainWindow中有两个框架。第一帧有一个带有DataGrid(绑定到XML文件)的页面,我在其中选择一个感兴趣的对象。

    <Grid.Resources>
        <XmlDataProvider x:Key="XmlData" Source="/DB.xml"/>
    </Grid.Resources>
    <DataGrid Name="dg"
              SelectionChanged="dg_SelectionChanged"
              AutoGenerateColumns="False"
              ItemsSource="{Binding Source={StaticResource XmlData}, XPath=Data/Object}">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding XPath=Type}"></DataGridTextColumn>
            <DataGridTextColumn Binding="{Binding XPath=Number}"></DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>

在第二帧中,我根据我要对所选对象执行的计算打开不同的页面(一次一个)。在每个SelectionChanged事件中,调用一个自定义方法MySub(),它会在加载的页面上启动所有必要的计算。

public partial class pg_DB : Page
{              
    public pg_DB()
    {
        InitializeComponent();
    }       

    public void dg_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        switch (Var._loadedPage) // This variable holds the name of the loaded page.
        {
            case "pg_SCT":
                pg_SCT c1 = new pg_SCT();
                c1.MySub();  // Initiates the calculation process on pg_SCT page. 
                break;
            case "pg_OCT":
                pg_OCT c2 = new pg_OCT();
                c2.MySub();  // Initiates the calculation process on pg_OCT page.
                break;
        }
    }
} 

问题在于除了数据可视化之外,一切运行良好。因此,例如,每次调用MySub()时List&lt;&gt;正在更新,ItemsSource具有必要的项目,但它们不会显示在DataGrid中。而且,即使是简单的TextBox1.Text =&#34;测试&#34;不管用。同时,相同的代码可以完美地使用Button_Click方法。

public partial class pg_SCT : Page       
{
    public pg_SCT()
    {
       InitializeComponent();
       //grid.ItemsSource = myList ();  (This works).    
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        //grid.ItemsSource = myList (); (This works).
        //TextBox1.Text = "Test";       (This works).
    }

    public void MySub()
    {
        grid.ItemsSource = myList(); // Nothing happens (although debugging shows that List is updated and ItemsSource has necessary items).
        TextBox1.Text = "Test";      // Textbox remains empty.    
    }

    public class Author
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }

    private List<Author> myList()
    {
        List<Author> authors = new List<Author>();
        authors.Add(new Author()
        {
            ID = Var._ID,
            Name = Var._Name,
        });
        return authors;
    }                
}

我无法找到从我的自定义方法MySub()填充DataGrid和TextBox所缺少的内容。

感谢您的时间和考虑。

1 个答案:

答案 0 :(得分:0)

dg_SelectionChanged方法中,您将Page控件的实例创建为局部变量,但不在任何地方使用它们,因此它们只是超出范围。我猜你可能有其他在其他地方创建的实例,但是根据这里的代码,调用MySub的代码永远不会出现。