WPF标签内容数据绑定

时间:2010-11-02 12:40:47

标签: wpf-controls binding

我在WPF4中有一个标签,并尝试将内容绑定到c#类的值。我创建了一个ObjectDataProvider,但由于某种原因无法看到内容或更新。你能指出我做错了吗?

这是xaml -

<Grid.Resources>
<local:SummaryData x:Key="mySummaryData"/> </Grid.Resources>
<Label Name ="lbCurrentVerValue" Grid.Row="1" Grid.Column="2" Content="{Binding Path=frameworkVersion, Source={StaticResource mySummaryData}}"/>
<TextBox Name ="lbFromVerValue" Grid.Row="2" Grid.Column="2" Text="{Binding Source={StaticResource mySummaryData}, Path=frameworkVersion}"/>

这是c#代码 -

namespace DBUpgradeUI

{

public partial class DBUpgReadinessCheck : Window
{
    public string userConnStr = String.Empty;
    public string userFoldPath = String.Empty;
    public SummaryData sd = new SummaryData();

    public DBUpgReadinessCheck()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        ReadinessCheck(userConnStr, userFoldPath);
    }

    public void ReadinessCheck(string connectionString, string folderPath)
    {
        FrmImportUtility frmWork = new FrmImportUtility();
        sd.frameworkVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); ;
        frmWork.CurrentlyProcessingVersion(connectionString, folderPath, ref sd.currentVersion, ref sd.finalVersion);
    }
}
public class SummaryData
{
    public string currentVersion = "Test";
    public string finalVersion = "finalVerTest";
    public string frameworkVersion = String.Empty;
}

}

2 个答案:

答案 0 :(得分:0)

您必须在SummaryData中实现INotifyPropertyChanged:

public class SummaryData:INotifyPropertyChanged
{
  private string currentVersion = "Test";

  public string CurrentVersion
  {
    get { return currentVersion; }
    set { 
          currentVersion = value; 
          NotifyChanged("CurrentVersion"); 
        }
  }

  private void NotifyChanged(string p)
  {
    if (PropertyChanged != null)
    {
      PropertyChanged(this,
            new PropertyChangedEventArgs(property));
    }
  }

  #region INotifyPropertyChanged Members

  public event PropertyChangedEventHandler PropertyChanged;

  #endregion
}

答案 1 :(得分:0)

在尝试从类对象绑定属性而没有依赖属性且没有运气之后,我做了以下操作,它就像一个魅力!

xaml -

  <Label Name ="lbCurrentVerValue" Grid.Row="1" Grid.Column="2" Content="{Binding Mode=OneWay, ElementName=step2Window,Path=currentVersion}"/>
  <Label Name ="lbFromVerValue" Grid.Row="2" Grid.Column="2" Content="{Binding Mode=OneWay, ElementName=step2Window,Path=finalVersion}"/>

和c#代码 -

 public partial class DBUpgReadinessCheck : Window
{
    //Values being passed by step1 window
    public string userConnStr = String.Empty;
    public string userFoldPath = String.Empty;

    //Dependency properties
    public string currentVersion
    {
        get { return (String)this.GetValue(CurVersionProperty); }
        set { this.SetValue(CurVersionProperty, value); }
    }
    public static readonly DependencyProperty CurVersionProperty =
           DependencyProperty.Register("currentVersion", typeof(String), typeof(DBUpgReadinessCheck), new UIPropertyMetadata("0"));


    public String finalVersion
    {
        get { return (String)GetValue(FinVerProperty); }
        set { SetValue(FinVerProperty, value); }
    }
    public static readonly DependencyProperty FinVerProperty =
        DependencyProperty.Register("finalVersion", typeof(String), typeof(DBUpgReadinessCheck), new UIPropertyMetadata("0"));

    public string frameworkVersion
    {
        get { return (String)GetValue(FrameWrkVersionProperty); }
        set { SetValue(FrameWrkVersionProperty, value); }
    }
    public static readonly DependencyProperty FrameWrkVersionProperty =
        DependencyProperty.Register("frameworkVersion", typeof(String), typeof(DBUpgReadinessCheck), new UIPropertyMetadata("0"));

    public DBUpgReadinessCheck()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        ReadinessCheck(userConnStr, userFoldPath);
    }

    public void ReadinessCheck(string connectionString, string folderPath)
    {
        FrmImportUtility frmWork = new FrmImportUtility();
        frameworkVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
        string tempCurVersion = string.Empty;
        String tempFinalVersion = string.Empty;
        frmWork.CurrentlyProcessingVersion(connectionString, folderPath, ref tempCurVersion, ref tempFinalVersion);
        currentVersion = tempCurVersion;
        finalVersion = tempFinalVersion;

        //Validation
        if (finalVersion == frameworkVersion)
        {
            string strUri2 = String.Format(@"pack://application:,,,/GreenCheck.jpg");
            ImgFrmVersion.Source = new BitmapImage(new Uri(strUri2));
            yelloExclamation.Visibility = System.Windows.Visibility.Hidden;
            errMsg.Visibility = System.Windows.Visibility.Hidden;
            succMsg.Visibility = System.Windows.Visibility.Visible;
            btRecheckSetUp.Visibility = System.Windows.Visibility.Hidden;
            btStartUpgrade.IsEnabled = true;
        }
    }

这很有效。谢谢大家的帮助。