1
私はDocTextが初めて設定されたときにコールバックが呼び出される以下のコードで問題に直面しています。その後DocTextを設定してもコールバックは呼び出されません。 DocTextプロパティに同じ文字列を設定して、ブラウザのhtmlをリセットしようとしています。ウェブブラウザのインスタンスを作成しますコールバックが2回目に動作しない
のWebBrowserクラス
public static readonly DependencyProperty DocumentTextProperty =
DependencyProperty.Register("DocumentText", typeof(string),
typeof(WebBrowser), new
FrameworkPropertyMetadata(string.Empty,TextChangedCallback));
private static void TextChangedCallback(DependencyObject
dependencyObject, DependencyPropertyChangedEventArgs
dependencyPropertyChangedEventArgs)
{
var control = (WebBrowser)dependencyObject;
control._browser.DocumentText = dependencyPropertyChangedEventArgs.NewValue.ToString();
}
public string DocumentText
{
get { return (string)GetValue(DocumentTextProperty); }
set { SetValue(DocumentTextProperty, value); }
}
ファクトリクラスは、ブラウザを使用している「DocText」
if (!String.IsNullOrEmpty(documentTextProperty))
{
browser.SetBinding(WebBrowser.DocumentTextProperty, documentTextProperty);
}
に依存関係プロパティをバインドするバインディングセットとdocumentTextProperytがされていますViewModelクラスからこのように設定します
DocText = "some html string";
public string DocText
{
get
{
_docText = if(html != null? html: string.empty);
return _docText;
}
set
{
docText = value;
OnPropertyChanged(() = DocText);
}
}
ありがとうKiranしかし、依存関係プロパティとView Modelプロパティの間でファクトリクラスで定義されたバインディングを持つことができるようにする必要があります。コードを使用して、View Modelプロパティの値を変更するとブラウザコントロールが更新されます。 – Kaddy
こんにちは、私はあなたのコントロールの依存関係プロパティに値を設定しようとしているファクトリメソッドにあるかもしれません。これが当てはまる場合は、適切なメソッドを使用して値を設定していません。 SetBindingメソッドは、コントロールへのバインドを設定するために使用されます。一方、SetValueメソッドは、コントロールの依存関係プロパティの値を更新するために使用されます。以下は、精巧なコメントを使用してさらに説明するスニペットです。メソッド名:BindingMode.OneWay); –
// DocumentText = "{Binding TestString、Mode = OneWay}" myControl.SetBinding(MaskedTextBox.DocumentTextProperty、new Binding(){Source = DataContext、Path = new PropertyPath(nameof(TestString))、 ); TestString = "テスト中"; //コントロールがたTestStringプロパティ」 myControl.SetValue(MaskedTextBox.DocumentTextProperty、 『もう一つのテスト』)にバインドされているので、これは「それをテスト」コントロールに表示されます。 //これはコントロールに表示される「もう一つのテスト'コントロールプロパティの値がここでプログラム的に更新されるためです。 –