在我的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所缺少的内容。
感谢您的时间和考虑。
答案 0 :(得分:0)
在dg_SelectionChanged
方法中,您将Page
控件的实例创建为局部变量,但不在任何地方使用它们,因此它们只是超出范围。我猜你可能有其他在其他地方创建的实例,但是根据这里的代码,调用MySub
的代码永远不会出现。