0

編集可能なラベルコントロールを使用します(テンプレートプロパティがオーバーライドされたラベル。そこに表示される完全なコード:http://www.nathanpjones.com/wp/2012/09/editable-label-in-wpf/)。

このスタイルで独自のラベル制御クラスを作成します。EditableLabelControlクラスはLabelクラスを拡張するため、EditableLabelControlにはContentプロパティがあります。

public partial class EditableLabelControl : Label
{
    //...
}

その後、この編集可能なラベルをカスタムコントロールに配置し、モデルのMyValueプロパティにバインドします。

<controls:EditableLabelControl Content="{Binding Path=MyValue, Mode=TwoWay}" />

モデル値は正しく表示されますが、テキストボックスで編集すると、Contentプロパティのみが更新されます(モデルのMyValueプロパティは更新されません)。

テキストボックス用のLostFocusハンドラーを作成しようとしましたが、役に立ちません。

var bindingExpression = ((TextBox)sender).GetBindingExpression(TextBox.TextProperty);
if (bindingExpression != null)
{
    bindingExpression.UpdateSource();
}

私の間違いはどこにありますか?答えてくれてありがとう、そして私の悪い英語をお詫びします。

4

1 に答える 1

1

に設定してみてUpdateSourceTriggerくださいPropertyChanged。これにより、テキストボックスのプロパティが変更されるたびにラベルが更新されます。

例:

    <StackPanel>
        <Label Content="{Binding ElementName=UI, Path=MyValue, UpdateSourceTrigger=PropertyChanged}" x:Name="label"/>
        <TextBox Text="{Binding ElementName=UI, Path=MyValue, UpdateSourceTrigger=PropertyChanged}" x:Name="textbox" />
    </StackPanel>

コード:

    public partial class EditableLabelControl : Label, INotifyPropertyChanged
    {
        private string _myValue;
        public string MyValue
        {
            get { return _myValue; }
            set { _myValue = value; NotifyPropertyChanged("MyValue"); }
        }


        public event PropertyChangedEventHandler PropertyChanged;
        /// <summary>
        /// Notifies the property changed.
        /// </summary>
        /// <param name="property">The info.</param>
        public void NotifyPropertyChanged(string property)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }
        }
    }
于 2012-12-22T03:23:14.387 に答える