1

コンテンツを依存オブジェクトにバインドするcontentcontrolを持つユーザーコントロールを作成しようとしています。コードは次のとおりです

Xaml

    <ContentControl Grid.Column="1" HorizontalAlignment="Stretch" x:Name="NotifyContent" Content="{Binding ElementName=notifyBarCtrl, Path=Content, NotifyOnSourceUpdated=True}" />

c#

public object Content
{
    get { return (object)GetValue(ContentProperty); }
    set { SetValue(ContentProperty, value); }
}

// Using a DependencyProperty as the backing store for Content.  This enables animation, styling, binding, etc...
public static readonly DependencyProperty ContentProperty =
    DependencyProperty.Register("Content", typeof(object), typeof(NotifyBar));

私が抱えている問題は、xamlを使用してコンテンツをテキストブロックとして定義し、アプリケーションの文字列にテキストプロパティをバインドしようとすると、文字列が変更されたときに更新に失敗することです。

私のアプリケーションコードは次のとおりです

Xaml

<ctrl:NotifyBar DockPanel.Dock="Top" Background="White" HorizontalAlignment="Stretch" >
    <ctrl:NotifyBar.Content>
        <TextBlock Height="30" Text="{Binding ElementName=MainWindow, Path=NotifyMessage, Mode=TwoWay}" HorizontalAlignment="Stretch" />
    </ctrl:NotifyBar.Content>
</ctrl:NotifyBar>

c#

    public string NotifyMessage
    {
        get { return _NotifyMessage; }
        set 
        {
            if (_NotifyMessage != value)
            {
                _NotifyMessage = value;
                OnPropertyChanged("NotifyMessage");
            }
        }
    }

私が行方不明になっているかもしれない、または間違ったことをしたかもしれないことについての提案は大歓迎です。

ありがとう

[編集]

その後、コンテンツをUserControlにオーバーライドしているという警告が表示されたため、コンテンツ依存プロパティをNotifyContentに変更しましたが、それでも問題は解決していません。

4

1 に答える 1

0

それで、テキストブロック内でelementnameを使用していたためだとわかりました。

ユーザーコントロールのDataContextを要素に設定し、プロパティにバインドすると、機能します。

下記参照:

<ctrl:NotifyBar DataContext="{Binding ElementName=MainWindow}"  DockPanel.Dock="Top" Background="White" HorizontalAlignment="Stretch" >
    <ctrl:NotifyBar.Content>
        <TextBlock Height="30" Text="{Binding Path=NotifyMessage, Mode=TwoWay}" HorizontalAlignment="Stretch" />
    </ctrl:NotifyBar.Content>
</ctrl:NotifyBar>
于 2012-08-09T10:49:00.840 に答える