我有一个弹出窗口,其中我有一个texblock,我想绑定到我的ViewModel属性。我已经成功绑定一个布尔值,在我的弹出窗口,我已经基本上完成了我的字符串是相同的,但不知何故字符串属性不更新......WPF属性绑定的TextBlock
这里是我的.xaml:
<Popup Margin ="10" HorizontalAlignment="Center" VerticalAlignment="Top" AllowsTransparency="True" IsOpen="{Binding OpenPopup}" Height="150" Width="300">
<Grid Background="#FFFFCCCC">
<TextBlock x:Name="NewVersionText" Margin="10,10,10,10" TextWrapping="Wrap" VerticalAlignment="Top" HorizontalAlignment="Center" FontSize="14" Width="230">
Eine neue Version der Applikation ist verfügbar. <LineBreak /> Möchten Sie diese herunterladen?
</TextBlock>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="10,10,10,10" TextWrapping="Wrap" Width="230" Text="{Binding DownloadText}"/>
</Grid>
</Popup>
[编辑]:这些按钮点击时的属性的改变发生:
<Button Content="Ja" HorizontalAlignment="Left" Height="20" VerticalAlignment="Top" Width="70" Command="{Binding DownloadVersionCommand}"/>
<Button Content="Später" HorizontalAlignment="Left" Height="20" Margin="75,0,0,0" VerticalAlignment="Top" Width="70" Command="{Binding ClosePopupCommand}"/>
物业我已经成功绑定是OpenPopup在ISOPEN =“{结合OpenPopup}”,即不所述一个工作是Text =“{Binding DownloadText}”中的DownloadText。 .xaml有一个已经连线的ViewModel(正如我所说的,它可以很好地处理所有其他属性)。
在我的视图模型C#代码是:[编辑:两个性质是在相同的视图模型] 对于文本字符串:
private string _downloadText;
public string DownloadText {
get {
return _downloadText;
}
set {
_downloadText = value;
Debug.WriteLine("DownloadText = " + value);
RaisePropertyChanged();
}
}
private void DownloadVersion() {
DownloadText = "Download gestartet";
VersionManager.downloadFile();
对于弹出布尔:
private bool _openPopup;
public bool OpenPopup {
get {
return _openPopup;
}
set {
_openPopup = value;
Debug.WriteLine("Open Popup = " + value);
RaisePropertyChanged();
}
}
private void ClosePopoup() {
OpenPopup = false;
}
RaisePropertyChanged()方法是这样实现的:
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged([CallerMemberName] string propertyName = null) {
if (PropertyChanged == null)
return;
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
Debug.WriteLine("MainWindowViewModel, PropertyChanged: " + propertyName);
}
}
当CloseP调用opup()方法时,属性发生变化,导致我弹出窗口的IsOpen-Property变为false,并关闭..就像它应该那样。
当调用DownloadVersion()方法时,属性DownloadText也成功更改,但未在我的视图中更新。任何建议我失踪?
[编辑]:绑定按钮:
public ICommand DownloadVersionCommand {
get; set;
}
// In the ViewModel Constructor:
DownloadVersionCommand = new RelayCommand(o => {
Debug.Write("DownloadVersionCommand " + o);
DownloadVersion();
})
当您运行该程序并显示弹出窗口时,是否在Visual Studio的输出窗口中看到任何绑定错误? –
如果'DownloadText'和'OpenPopup'都在同一个视图模型中,那么您的代码对我来说非常适用。 –
是的,两者都在相同的viewmodel ...至于埃里克的问题:我从输出窗口得到这个:'App.exe'(CLR v4.0.30319:App.exe):加载'C:\ WINDOWS \ Microsoft.Net \装配\ GAC_MSIL \ System.Numerics.Vectors \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System.Numerics.Vectors.dll”。找不到或打开PDB文件。 DownloadVersionCommand DownloadText =下载gestartet MainWindowViewModel,PropertyChanged:DownloadText – scalderon