我遇到了很多麻烦,试图将我的控件绑定到数据源。我尝试绑定到XML文档。这很有效,但是当我尝试刷新XML文档并更新UI时遇到了很多问题。WPF绑定控件到DataView
我最新的尝试是将我的控件绑定到DataView,这看起来很简单。我有一个示例应用程序,我发现这里StackOverflow上,这确实这样:
public MainWindow()
{
InitializeComponent();
DataTable dataTable = GetTable();
Binding dataTableBinding = new Binding();
dataTableBinding.Source = dataTable;
dataTableBinding.Path = new PropertyPath("Rows[0][MyTextColumn]");
txtMyTextColumnDataTable.SetBinding(TextBox.TextProperty, dataTableBinding);
DataView dataView = dataTable.DefaultView;
Binding dataViewBinding = new Binding();
dataViewBinding.Source = dataView;
dataViewBinding.Path = new PropertyPath("[0][MyTextColumn]");
txtMyTextColumnDataView.SetBinding(TextBox.TextProperty, dataViewBinding);
}
这工作完全,正确的开箱即用。我添加了一个代码更新数据表中的值的按钮,当我单击该按钮时,文本框会立即反映新值。
我想这在我的VB.Net项目,像这样:
dim plcData As DataTable = GetTable()
dim plcView As DataView = plcData.DefaultView
dim plcBinding As Binding = New Binding
plcBinding.Source = plcView
plcBinding.Path = New PropertyPath("(0)(conveyor_plc_data_Main_FeedCarousel_caroAngle)")
Me.tb.SetBinding(TextBlock.TextProperty, plcBinding)
而且这是行不通的。它不会更新我的UI控件。 在这两种情况下,GetTable都会用样本数据构建一行DataTable。在我的VB项目中,tb是我的MainWindow上的一个TextBlock。
在VB项目中,我可以打断我的代码并查询立即窗口中的特定数据列,并且正确的值在那里。它只是不会更新到我的控制。
这似乎是一件非常简单的事情。我对WPF相当陌生,看不出我的代码有什么问题。最终我想在我的XAML中定义绑定,但无法弄清楚如何做到这一点。此时,绑定的代码隐藏设置就可以了。我将有许多控件绑定到许多数据列。
有人可以告诉我我在这里失踪了什么明显的东西吗?
如果您使用与C#相同的属性路径,VB版本是否工作? 'plcBinding.Path =新的PropertyPath(“[0] [conveyor_plc_data_Main_FeedCarousel_caroAngle]”)' – 2013-03-18 19:07:59
OMG,这是愚蠢的简单?在我的辩护中,我认为这是正确的VB语法,通常使用parens而不是括号。 – RMittelman 2013-03-18 19:19:59
当我查询立即窗口中的值时,方括号不起作用:?plcView [0] [“conveyor_plc_data_Main_FeedCarousel_caroAngle”] 标识符预期。 – RMittelman 2013-03-18 19:21:39