コントロールをデータソースにバインドしようとすると、多くの問題が発生します。XMLドキュメントにバインドしてみました。それは機能しましたが、XMLドキュメント自体を更新してUIを更新しようとすると、多くの問題が発生しました。
私の最新の試みは、コントロールを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はサンプルデータを使用して1行のDataTableを作成します。私のVBプロジェクトでは、tbはメインウィンドウのTextBlockです。
VBプロジェクトでは、コードを中断して、イミディエイトウィンドウの特定のデータ列にクエリを実行できます。適切な値がそこにあります。それは私のコントロールに更新されません。
これは非常に簡単なことのようです。私はWPFにまったく慣れていないので、コードの何が問題になっているのかわかりません。最終的に、XAMLでバインディングを定義したいのですが、これを行う方法がわかりません。この時点で、バインディングのコードビハインド設定は問題ありません。多くのデータ列にバインドするための多くのコントロールがあります。
私がここで見逃している明らかなことを誰かに教えてもらえますか?