代码优先(出于这个问题的目的,简化了TextBox
的上方):
<TextBlock
Style="{StaticResource FieldNameStyle }"
TextWrapping ="Wrap" Height="33" FontSize="12"
Visibility="Visible"
TextAlignment="Center"
Foreground="#FFFFFF"
Opacity="0.5"
Text="{Binding UnderLineMsg}">
<Hyperlink Name="PrivacyNoticeLink2"
Command="{Binding OpenPrivacyNoticeCommand}">
<TextBlock
Visibility="Visible"
Name="privacyNoticeText2"
Text="{Binding PrivacyNoticeButtonLabel,FallbackValue='privacy notice' ,UpdateSourceTrigger=PropertyChanged}"/>
</Hyperlink>
</TextBlock>
这是第一次加载窗口后的外观:msg填充行下的链接:
窗口中的事件之一触发对
的调用OnPropertyChanged(null);
该方法会在窗口中使用以下方法订阅的所有成员中触发“刷新”:
UpdateSourceTrigger=PropertyChanged
一次被称为Hyperlink的元素完全消失(使用Snoop 2.8进行验证) 因此,通话后,它将如下所示: 在味精填充线下:
我不知道为什么会这样。当前的修复方法是用许多特定的调用代替常规的OnPropertyChanged
调用,但是从长远来看,这不是一个现实的选择。
编辑: 将问题隔离到一个新项目,请注意,当该问题仅在文本块内出现时,仍然会发生该问题
带有触发OnPropertyChanged的按钮的简单XAML
<Grid>
<Button Click="Meh" Margin="171,37,153,199">
PRESS ME
</Button>
<TextBlock Name="WrapperText" Text= "{Binding randomNumber}">
<TextBlock Name="linkText" Text="{Binding randomNumStr }"></TextBlock>
</TextBlock>
</Grid>
后面的代码:
public MainWindow()
{
DataContext = new Stuff();
InitializeComponent();
}
public void Meh(object sender, RoutedEventArgs e)
{
//MessageBox.Show(this, "BLA", "caption", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
//MessageBox.Show("FASDFASDFASDF");
(DataContext as Stuff).OnPropertyChanged(null);
//Msg.ShowMessageBox("BLA", "caption", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
}
“视图模型”
public class Stuff : INotifyPropertyChanged
{
public Stuff()
{
rnd = new Random();
}
private Random rnd;
public int randomNumber => rnd.Next(1, 100);
public string randomNumStr => randomNumber.ToString()+"Text";
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
public virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
请注意,我触发属性更改的真正令人作呕的方式。我知道我应该在'Stuff'类中使用Icommand,但是我想快速找出问题所在。在我的原始代码中,它已正确完成。
答案 0 :(得分:2)
不要绑定您还要添加Text
的{{1}}的{{1}}属性。引发source属性的TextBlock
事件将清除Hyperlink
。
您可以向其中添加一个PropertyChanged
元素,而不是绑定Hyperlink
本身的Text
属性:
TextBlock