将字符串属性绑定到TextBlock

时间:2012-11-05 15:32:56

标签: c# wpf data-binding

我有一个在代码中看起来像这样的usercontrol:

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属性但没有太多运气。 你能告诉我我做错了什么吗?

2 个答案:

答案 0 :(得分:3)

当属性发生变化时,您无法通知绑定系统。

您应该创建一个依赖项属性,它将自动使用WPF中的现有通知系统 为此,请键入propdp并按 Tab 以激活Visual Studio的内置代码段。

或者,创建一个单独的ViewModel类并实现INotifyPropertyChanged。

答案 1 :(得分:0)

Exampel:

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 );
    }
  }
}