C# getter 在输入时被调用两次
C# getter is called twice on input
为什么 c#-getter 被调用两次,如果我写一封信到 TextBox
?
在我看来,这很奇怪,因为只有一个元素 (Label
) 绑定到 属性 以获取值。
这是我的 xaml:
<Window x:Class="BindingDebug.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BindingDebug"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition Height="30" />
<RowDefinition Height="30" />
<RowDefinition Height="30" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Content="Firstname" />
<TextBox Grid.Row="0" Grid.Column="1" x:Name="firstNameTextBox" Height="24" VerticalAlignment="Center" HorizontalAlignment="Stretch"
Text="{Binding FirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<Label Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Left" Content="{Binding FirstName}" />
</Grid>
</Window>
隐藏代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new Model();
}
}
模特
public class Model : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string firstName;
public string FirstName
{
get
{
System.Diagnostics.Debug.WriteLine("Get: " + firstName ?? "");
return firstName;
}
set
{
firstName = value;
System.Diagnostics.Debug.WriteLine("Set: " + value ?? "");
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("FirstName"));
}
}
}
}
或者 getter 被调用两次是否正确?调试输出转到 Visual Studio 输出 window.
谢谢!
Microsoft 于 2010 年 4 月 28 日上午 10:10 发布这不是错误。 WPF(或任何其他代码)可以随时出于任何原因调用您的 属性-getter;没有规定它只会被调用一次。 WPF(和其他调用者)期望您的 属性 遵循 .Net 指南;特别是 属性-getter 速度很快,并且它将 return 每次调用的值相同,除非您提出 属性-changed 通知。
查看此处获取链接等:WPF Binding View as Content
为什么 c#-getter 被调用两次,如果我写一封信到 TextBox
?
在我看来,这很奇怪,因为只有一个元素 (Label
) 绑定到 属性 以获取值。
这是我的 xaml:
<Window x:Class="BindingDebug.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BindingDebug"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition Height="30" />
<RowDefinition Height="30" />
<RowDefinition Height="30" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Content="Firstname" />
<TextBox Grid.Row="0" Grid.Column="1" x:Name="firstNameTextBox" Height="24" VerticalAlignment="Center" HorizontalAlignment="Stretch"
Text="{Binding FirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<Label Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Left" Content="{Binding FirstName}" />
</Grid>
</Window>
隐藏代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new Model();
}
}
模特
public class Model : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string firstName;
public string FirstName
{
get
{
System.Diagnostics.Debug.WriteLine("Get: " + firstName ?? "");
return firstName;
}
set
{
firstName = value;
System.Diagnostics.Debug.WriteLine("Set: " + value ?? "");
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("FirstName"));
}
}
}
}
或者 getter 被调用两次是否正确?调试输出转到 Visual Studio 输出 window.
谢谢!
Microsoft 于 2010 年 4 月 28 日上午 10:10 发布这不是错误。 WPF(或任何其他代码)可以随时出于任何原因调用您的 属性-getter;没有规定它只会被调用一次。 WPF(和其他调用者)期望您的 属性 遵循 .Net 指南;特别是 属性-getter 速度很快,并且它将 return 每次调用的值相同,除非您提出 属性-changed 通知。
查看此处获取链接等:WPF Binding View as Content