我在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;
}
}
答案 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;
}
}
这很有效。谢谢大家的帮助。