我是WPF中的新成員,並且存在以下問題。綁定不適用於動態數據更新
我有很多屬性的下面的類,但在這裏只有一個,例如物業:
public class StatusData : INotifyPropertyChanged
{
private string m_statusText = String.Empty;
public StatusData()
{
m_statusText = "1234";
}
public string StatusText
{
get
{
return m_statusText;
}
set
{
if (m_statusText != value)
{
m_statusText = value;
NotifyPropertyChanged("StatusText");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
該項目的另一個組成部分的變化StatusData
並調用MainWindow
Update()
功能。 因此,MainWindow
的m_statusData
已更改,我希望相應地更新textbox
和m_statusText
。
public class MainWindow
{
private StatusData m_statusData = new StatusData();
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
grid1.DataContext = m_statusData ;
}
public void Update(StatusData newStatusData)
{
m_statusData = newStatusData;
}
}
XAML代碼:
<Window x:Class="WpfApplicationUpdateTextBox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="myWin"
xmlns:local="clr-namespace:WpfApplicationUpdateTextBox"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded" >
<Grid Name="grid1">
<TextBox Text="{Binding Path=StatusText}" Name="textBox1" />
</Grid>
</Window>
的問題是:爲什麼textBox
沒有與newStatusData.StatusText
更新?
Update方法在窗體加載後調用嗎?因爲你的Update方法不會更新DataContext。 – norlando 2011-12-16 22:03:30
嗨,@norlando,是的,表單加載後調用的Update方法。我可以調用grid1。在Update方法中DataContext = m_statusData,但根據項目的設計,我需要調用每隔大約更新一次,因此grid1.DataContext = m_statusData將每秒完成一次。它可能是一個性能問題? – user1102760 2011-12-17 18:55:02