Jan*_*nda 6 data-binding wpf listbox
我试图绑定两个ListBox
es:
<ListBox SelectionChanged="lbApplications_SelectionChanged"
ItemsSource="{Binding Path=Applications,
UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" />
<ListBox DisplayMemberPath="Message"
ItemsSource="{Binding Path=Events,
UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" />
Run Code Online (Sandbox Code Playgroud)
Applications
并且Events
是Window
课堂上的公共财产.
我设置DataContext
了this
两个列表框并INotifyPropertyChanged
在Window
课堂上实现:
private void NotifyPropertyChanged(string info)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
Run Code Online (Sandbox Code Playgroud)
之后添加新项目Applications
或Events
我致电:
NotifyPropertyChanged("Events");
NotifyPropertyChanged("Applications");
Run Code Online (Sandbox Code Playgroud)
问题是ListBox
只加载一次.我究竟做错了什么?
exc*_*lsr 11
让我们看看其中一个ListBox,因为它们基本相同.
我们关注的代码是这样的:
<ListBox ItemsSource="{Binding Path=Applications,
UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" />
Run Code Online (Sandbox Code Playgroud)
既然你是WPF的新手,请允许我说你可能不需要UpdateSourceTrigger
或者Mode
在那里,这让我们知道:
<ListBox ItemsSource="{Binding Path=Applications}" />
Run Code Online (Sandbox Code Playgroud)
您提到Applications是您的代码隐藏中的公共属性.你需要它成为一个DependencyProperty
,你需要它来发生变化时触发事件 - 大多数人为此使用一个ObservableCollection.
所以,你的代码背后都会有一些像这样的:
public ObservableCollection<string> Applications
{
get { return (ObservableCollection<string>)GetValue(ApplicationsProperty); }
set { SetValue(ApplicationsProperty, value); }
}
public static readonly DependencyProperty ApplicationsProperty =
DependencyProperty.Register("Applications",
typeof(ObservableCollection<string>), typeof(Window1),
new UIPropertyMetadata(null));
Run Code Online (Sandbox Code Playgroud)
然后,在你想要添加的地方,你会做这样的事情:
this.Applications = new ObservableCollection<string>();
Applications.Add("Whatever");
Run Code Online (Sandbox Code Playgroud)
最后,为了在XAML中使用"简单"绑定语法,我通常会DataContext
在我的窗口(或文件的根控件元素,无论我在做什么)中更改为
<Window DataContext="{Binding RelativeSource={RelativeSource Self}}" ... >
...
Run Code Online (Sandbox Code Playgroud)
您的应用程序框将自动更新.
归档时间: |
|
查看次数: |
23346 次 |
最近记录: |