WPFで画面を作成しており、
LabelのContext、Backgroundをbindingして別スレッドからバインドクラスの値を変更するロジックを作成しています。
ContextはUpdateSourceTrigger=PropertyChangedで画面へ反映することができるようになりましたが、BackgroundはSystem.ArgumentExceptionが発生します。
例外メッセージから解決方法を見つけ出すこともできず、行き詰っております。
例外メッセージ
例外がスローされました: 'System.ArgumentException' (WindowsBase.dll の中)
DependencySource は、DependencyObject と同じ Thread 上で作成する必要があります。
Backgroundに対してPropertyChangedイベントは利用できませんか?
どのような方法でもいいので、bindingする方法をご教示いただければと思います。
<追記 : バインド実装>
xaml
<Label x:Name="lblB" Content="{Binding lbl_Context, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Background="{Binding lbl_Background, UpdateSourceTrigger=PropertyChanged}" />
MainWindow.vb
Sub New() InitializeComponent() 'データバインディング model = New DataModel Me.DataContext = modl 'データモデルデータ更新スレッドスタート End Sub
DataModel.vb
Public Class DataModel Implements INotifyPropertyChanged 'テキスト Private lblcont As String '背景色 Private lblBackground As Brush = New SolidColorBrush(Colors.LightGray) '表示更新通知イベント Private Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Private Sub OnPropertyChanged(propertyName As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) End Sub Private Sub SetProperty(Of T)(ByRef storage As T, value As T, propertyName As String) Try If Object.Equals(storage, value) Then Return End If storage = value OnPropertyChanged(propertyName) Catch ex As Exception 'エラーログ出力処理 End Try End Sub 'Content用 Public Property lbl_Context As String Get Return lblcont End Get Set(ByVal value As String) SetProperty(lblcont, value, "lbl_Context") End Set End Property Public Property lbl_Background As Brush Get Return lblBackground End Get Set(ByVal value As Brush) SetProperty(lblBackground, value, "lbl_Background") End Set End Property
回答1件
あなたの回答
tips
プレビュー