データバインディングがよく理解できません。
MVVMを勉強したく、テスト的に書いてみました。
ですが、データがうまくバインドされません。
下の記述は、関係ない部分を省いたのですが、満足した状態で動かした際、
xamlファイルに記述したLabel
コントロールに確かにバインディングされ、表示は出ました(vm
オブジェクト)。
ただし、表示させたいのはvm.Server.ServerName
で、
そのためにxamlファイル側を{Binding vm.Server.ServerName}
としても、これは表示されません。
(Me.DataContext
にインスタンスは、きちんとは渡っています。)
試しに、vm.Name
が表示できるか試してみたのですが、({Binding vm.Name}
)
こちらも表示がされません。
参考にしたサイトによるとこの書き方でも、バインドできるように見えたのですが・・・
(https://www.atmarkit.co.jp/ait/articles/1010/08/news123.html)
ご助言を頂きたく思います。
xaml
1# MainWin.xaml(view) 2<Window x:Class="MainWin" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 6 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 7 xmlns:local="clr-namespace:test2" 8 mc:Ignorable="d" 9 Title="MainWin" Height="500" Width="800"> 10 <Grid> 11 : 12 省略 13 : 14 <Label x:Name="label" Grid.ColumnSpan="12" Content="{Binding vm}" Grid.Column="30" HorizontalAlignment="Left" Height="100" Margin="9,9,0,0" Grid.Row="3" Grid.RowSpan="12" VerticalAlignment="Top" Width="100"/> 15 </Grid> 16</Window>
vb
1'Model.vb 2Public Class Model 3 Public Name As String 4 Public Server As ServerModel 5End Class 6 7Public Class ServerModel 8 Public ServerName As String 9 Public DataBases As List(Of DataBaseModel) 10End Class 11 12Public Class DataBaseModel 13 Public DataBaseName As String 14 Public DataTables As List(Of DataTableModel) 15End Class 16 17Public Class DataTableModel 18 Public DataTableName As String 19End Class
vb
1'ViewModel.vb 2Imports System.ComponentModel 3 4Public Class ViewModel : Implements INotifyPropertyChanged 5 : 6 省略 7 : 8 Private _vm As Model 9 Public Property vm As Model 10 Get 11 Return _vm 12 End Get 13 Set(value As Model) 14 _vm = value 15 End Set 16 End Property 17 18 Public Sub New() 19 Dim m As Model = New Model 20 m.Name = "hogehoge" 21 Dim s As ServerModel = New ServerModel _ 22 With {.ServerName = "hoge", .DataBases = New List(Of DataBaseModel)} 23 Dim db As DataBaseModel = New DataBaseModel _ 24 With {.DataBaseName = "fuga", .DataTables = New List(Of DataTableModel)} 25 Dim dt As DataTableModel = New DataTableModel _ 26 With {.DataTableName = "piyo"} 27 db.DataTables.Add(dt) 28 s.DataBases.Add(db) 29 m.Server = s 30 Me.vm = m 31 End Sub 32End Class 33
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/07/22 00:01 編集