1

私はWPFを初めて使用し、このような方法でクラスのWPFフォームのラベルテキストを更新しようとしています。onchangeイベントがトリガーされていますが、フォームに表示されていません

これが私のクラスです

Public Class ExtractDetails
Inherits UserControl
Implements INotifyPropertyChanged

Private _prdFrstName as string
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged

Public Property PrdFrstName() As String
    Get
        Return _prdFrstName
    End Get
    Set(ByVal value As String)
        If _prdFrstName <> value Then
            _prdFrstName = value
            Me.OnPropertyChanged("PrdFrstName")
        End If
    End Set
End Property

Public Sub suMainStrt()
    PrdFrstName = strComurl     ''contyains teh URL to nagigate to
    webBrwFrst = New WebBrowser
    webBrwFrst.Navigate(New Uri(strComurl))
    Call extract(webBrwFrst, strComurl)
end sub

エンドクラス

Excelファイルから値を取得し、URLごとにループするため、URLは変化し続けます。現在機能しているURLを表示したかった

これは私のXAMLです

<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Avenet Prduct Description Extractor" Height="396.627" Width="588.123" Background="AliceBlue" Icon="LGIcon.ico">
<Grid Height="341.077" Width="567.721" Background="AliceBlue">

<StackPanel Margin="170.225,226.418,3.143,0" Name="StackPanel1" Height="97.994" VerticalAlignment="Top">
        <Label Height="30.906" Name="lblCrntSt1" Content="{Binding Path=PrdFrstName, UpdateSourceTrigger=PropertyChanged}" Width="161" BorderThickness="2" BorderBrush="AliceBlue" Background="Red" Foreground="White" FontSize="13"></Label>

    </StackPanel>
    </Grid>

これが私のWindowsクラスです。

 Class Window1
 Dim clsIniti As New ExtractDetails
 Public Sub New()
    ' This call is required by the Windows Form Designer.
    InitializeComponent()
    'clsIniti = New ExtractDetails
    Me.DataContext = clsIniti
 End Sub    
 end class

テキストラベルを更新しなくても、関数全体が正常に機能しています。しかし、私はいくつかのものを表示したいと思います。私が間違っているところ

新しく作成したプロジェクトの一部を削除して、データバインディングを試しました。そこで動作します。したがって、このコードに何か問題がありますか?:`(

4

1 に答える 1

1

これがうまくいかない原因として、2 つの可能性が考えられます。

A. OnPropertyChanged メソッドはどのように見えますか?

' Correct implementation:
Private Sub OnPropertyChanged(propertyName As String)
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
End Sub

B. suMainStrt を呼び出す ExtractDetails インスタンスが DataContext インスタンスと同じであることを確認します。Window1 のコンストラクターから直接 suMainStrt を呼び出して、これをテストします。

Class Window1
    Dim clsIniti As New ExtractDetails
    Public Sub New()
        ' This call is required by the Windows Form Designer.
        InitializeComponent()
        'clsIniti = New ExtractDetails
        Me.DataContext = clsIniti

        ' test (if this works, your problem is B.)
        clsIniti.suMainStrt()
    End Sub    
End Class

補足として、これを行う正当な理由がない限り、バインド先のプロパティを含む専用のビューモデル (ユーザー コントロールではなくクラス) を作成することをお勧めします。

于 2013-02-25T10:23:25.180 に答える