0

私はコードで次のようなユーザーコントロールを持っています:

using System;
using System.Windows;
using System.Windows.Controls;

namespace Client
{
    public partial class Spectrum : UserControl
    {
        public string AntennaName { get; set; }

        public Spectrum()
        {
            InitializeComponent();
        }
    }
}

およびxaml(全体ではなく重要な部分):

<UserControl x:Class="Client.Spectrum"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Client"
             mc:Ignorable="d" d:DesignHeight="150" d:DesignWidth="350" 
             Background="#253121" BorderBrush="Black" BorderThickness="1"
             DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <StackPanel
        <TextBlock Margin="10,3,0,0" Foreground="White" 
                   FontWeight="Bold" FontStyle="Italic" TextAlignment="Left"
                   Text="{Binding AntennaName}"/>
    </StackPanel>
</UserControl>

ご覧のとおり、AntennaNameプロパティをTextBlock.Textプロパティにバインドしようとしていますが、運がよくありません。私が間違っていることを教えてもらえますか?

4

2 に答える 2

3

プロパティが変更されたときにバインディングシステムに通知する方法はありません。

依存関係プロパティを作成する必要があります。これにより、WPFの既存の通知システムが自動的に使用されます。
これを行うには、入力propdpしてを押しTab、VisualStudioの組み込みコードスニペットをアクティブにします。

または、別のViewModelクラスを作成し、INotifyPropertyChangedを実装します。

于 2012-11-05T15:37:10.827 に答える
0

例:

public partial class MyControl: UserControl
{
  public CoalParameterGrid( )
  {
    InitializeComponent( );
  }

  public static DependencyProperty DarkBackgroundProperty = DependencyProperty.Register( "DarkBackground", typeof( Brush ), typeof( MyControl) );

  public Brush DarkBackground
  {
    get
    {
      return (Brush)GetValue( DarkBackgroundProperty );
    }
    set
    {
      SetValue( DarkBackgroundProperty, value );
    }
  }
}
于 2012-11-05T15:44:58.803 に答える