C# 将TextBlock绑定到ListView更改的属性
我就是搞不懂。绑定文本块时我缺少了什么? 每次我在ListView中选择一个新项目时,我都需要TextBlock进行更新 这是我做的样品。在我的实际应用程序中,我使用ListView1中的id从我的DB中获取我想要在文本块中显示的内容 我知道WPF绑定到属性,我需要实现INotifyPropertyChanged,但是我不能正确地进行绑定,或者我缺少了其他东西 我添加了DateTime.Now.toString只是为了更清楚地看到文本块是否发生了更改 XAML: CC# 将TextBlock绑定到ListView更改的属性,c#,wpf,binding,properties,observer-pattern,C#,Wpf,Binding,Properties,Observer Pattern,我就是搞不懂。绑定文本块时我缺少了什么? 每次我在ListView中选择一个新项目时,我都需要TextBlock进行更新 这是我做的样品。在我的实际应用程序中,我使用ListView1中的id从我的DB中获取我想要在文本块中显示的内容 我知道WPF绑定到属性,我需要实现INotifyPropertyChanged,但是我不能正确地进行绑定,或者我缺少了其他东西 我添加了DateTime.Now.toString只是为了更清楚地看到文本块是否发生了更改 XAML: C OnPropertyChan
OnPropertyChanged需要具有正确的属性名称 而不是OnPropertyChangedPersonName;使用
+哇,谢谢,我不知道。哦,我知道它必须有名字作为财产。第一个测试看起来很有效。我会接受更多的测试后。
<Window x:Class="WpfSO.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" x:Name="txtBlockPerson"
Text="{Binding MyPerson}" />
<ListView Grid.Row="1" Grid.Column="0" x:Name="ListView1"
ItemsSource="{Binding ListData}"
IsSynchronizedWithCurrentItem="True"
SelectionChanged="ListView1_SelectionChanged">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Left" />
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"></TextBlock>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Window>
using System;
using System.ComponentModel;
using System.Windows;
using System.Collections.ObjectModel;
namespace WpfSO
{
public partial class MainWindow : Window
{
private ObservableCollection<Person> ListData { get; set; }
private const string _myName = "You clicked on: ";
public Person MyPerson { get; set; }
public MainWindow()
{
InitializeComponent();
// TextBlock
MyPerson = new Person(_myName);
txtBlockPerson.DataContext = MyPerson;
// ListView
ListData = new ObservableCollection<Person>();
var p1 = new Person("p1");
var p2 = new Person("p2");
ListData.Add(p1);
ListData.Add(p2);
ListView1.ItemsSource = ListData;
}
private void ListView1_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
MyPerson.Name = _myName + ListView1.SelectedItem + ". Time: " +DateTime.Now.ToString();
}
}
public class Person : INotifyPropertyChanged
{
private string _name;
public event PropertyChangedEventHandler PropertyChanged;
public string Name
{
get { return _name; }
set
{
if (value != _name)
{
_name = value;
OnPropertyChanged("PersonName");
}
}
}
public Person(string name)
{
Name = name;
}
// Create the OnPropertyChanged method to raise the event
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
}
OnPropertyChanged("Name");