0

要件

私の要件は、同じウィンドウのラベルやテキストブロックなどの別の読み取り専用コントロールにテキストボックスの値を表示することです。

ソリューションアプローチ

TextBox と TextBlock のターゲット プロパティ Text は、同じソース オブジェクト (文字列型の単純な CLR プロパティ) にバインドされたデータです。バインドされたソース プロパティは、INotifyPropertyChanged を介してプロパティ変更通知を実装します。

観察

実行時に textBox は読み取り専用になり、ユーザーはテキストボックスのテキストを手動で変更できなくなります。質問: テキスト ボックスの編集可能性は、テキスト ブロックの存在によってどのように影響を受けますか。TextBox のデフォルトのバインド モードは双方向ですが、テキスト ブロックのバインド モードは一方向であることを理解しています。しかし、私はこの背後にある理由を理解できません。また、この問題をどのように解決すればよいでしょうか。

XAML

<TextBox x:Name="txtBox" Text="{Binding Name }"/>
<TextBlock Text="{Binding Name}"/>

ビューモデル

private string _name = "Welcome";
public string Name
{
    get
    { return _name; }
    set
    {
        if(_name!= value)
        {
            _name = value;
            RaisePropertyChanged("Name");
        }
    }
}

TextBlock の Text プロパティを TextBox の text プロパティにバインドしたデータを設定しても、TextBox はまだ読み取り専用です。テキストブロックの代わりにラベル コントロールを使用しても、同じ動作が得られます。

 <TextBox x:Name="txtBox" Text="{Binding Name }"/>
 <TextBlock Height="20" Text="{Binding ElementName=txtBox, Path=Text}"/>

この動作の背後にある理由を教えてください。

4

0 に答える 0