因此,我有這個非常類似的代碼,當我在使用註釋行代碼時單擊按鈕時,GUI中的值是通過綁定更新一切都很好。如果我使用其他兩行(未知),即使我正在通知變化,也不會發生任何事情。當通知屬性發生變化而未指定新的實例屬性時,Wpf綁定不起作用
public partial class MainWindow : Window, INotifyPropertyChanged
{
private Spot _position = new Spot(0, 0);
public Spot Position
{
get { return _position; }
set { _position = value; OnPropertyChanged("Position"); }
}
public MainWindow()
{
InitializeComponent();
win.DataContext = this;
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string name)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
private void Button_Click(object sender, RoutedEventArgs e)
{
//Position = new Spot(5,5);
Position.UpdateX(5);
OnPropertyChanged("Position");
}
}
public class Spot
{
public Spot(int x, int y)
{
X = x;
Y = y;
}
public void UpdateX(int x)
{
X += x;
}
public void UpdateY(int y)
{
Y += y;
}
public override string ToString()
{
return string.Format("{0}; {1}", X, Y);
}
public int X { get; set; } = 0;
public int Y { get; set; } = 0;
}
XAML
<StackPanel x:Name="win" Orientation="Vertical" Margin="100">
<Label Content="{Binding Position, UpdateSourceTrigger=PropertyChanged}" Width="100" Height="25"></Label>
<Button Width="100" Height="25" Click="Button_Click">Click</Button>
</StackPanel>
先感謝您的任何意見。
當您運行Position.UpdateX(5)時,您正在更新X而不是位置。因此它不起作用。在X上實現PropertyChanged,它會工作。並且不需要此行OnPropertyChanged(「Position」);. – adminSoftDK
這兩個未註釋的行對我有用。 –
@adminSoftDK我知道它可以像這樣修復,爲了對付它,我添加了額外的通知。另外,我不想用UI代碼搞亂Spot類。 –