У меня много проблем с попыткой привязать элементы управления к источнику данных. Я попробовал привязку к XML-документу. Это сработало, но было много проблем, когда я попытался обновить сам XML-документ и обновить его.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)
И это не работает. Он не будет обновлять мой пользовательский интерфейс. В обоих случаях GetTable создает 1-строчный DataTable с образцами данных. В моем проекте VB tb является TextBlock на моем MainWindow.
В проекте VB я могу прервать свой код и запросить конкретный столбец данных в окне Immediate, и там будет правильное значение. Он просто не будет обновлять мой контроль.
Это похоже на очень простую вещь. Я новичок в WPF и не вижу, что не так с моим кодом. В конце концов, я хотел бы определить привязку в своем XAML, но не могу понять, как это сделать. На этом этапе настройка привязки кода будет нормально. У меня будет много элементов управления, которые будут привязаны ко многим столбцам данных.
Может ли кто-нибудь сказать мне, какую очевидную вещь мне здесь не хватает?
Работает ли версия VB, если вы используете тот же путь свойств, что и C#? 'plcBinding.Path = New PropertyPath (" [0] [transportor_plc_data_Main_FeedCarousel_caroAngle] ")' –
OMG, это глупо просто ??? В моей защите я подумал, что это правильный синтаксис VB, который обычно использует парсеры вместо скобок. – RMittelman
Когда я запрашиваю значение в окне Immediate, скобки не работают:? PlcView [0] ["transportor_plc_data_Main_FeedCarousel_caroAngle"] Идентификатор ожидается. – RMittelman