问题描述
||
尝试了几个小时后,我对wpf的复杂数据绑定概念非常困惑:-/
在几个文本框中显示我的业务对象(例如Name,Street ..)属性的最简单方法是什么?
目标是:
用户可以浏览记录(下一个,上一个)
双向绑定-文本框中的更改也应更改基础属性的值。
我已经弄清楚了如何将框绑定到属性,但是如何实现到下一个/上一个记录的导航?
提前致谢!
解决方法
您将要查看ICollectionView方法。
这是一个工作示例:
xaml:
<Window.Resources>
<x:Array x:Key=\"myPeoples\" Type=\"{x:Type local:Person}\">
<local:Person Name=\"Bob Marley\" Address=\"123 street\" />
<local:Person Name=\"Ted Nugent\" Address=\"456 street\" />
<local:Person Name=\"Ron Paul\" Address=\"789 street\" />
</x:Array>
</Window.Resources>
<DockPanel>
<StackPanel DockPanel.Dock=\"Bottom\" Orientation=\"Horizontal\">
<Button x:Name=\"cmdPrevious\" Click=\"cmdPrevious_Click\">Previous</Button>
<Button x:Name=\"cmdNext\" Click=\"cmdNext_Click\">Next</Button>
</StackPanel>
<Grid DockPanel.Dock=\"Top\" DataContext=\"{StaticResource myPeoples}\">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBox Grid.Column=\"0\" Text=\"{Binding Path=Name}\" />
<TextBox Grid.Column=\"1\" Text=\"{Binding Path=Address}\" />
</Grid>
</DockPanel>
后面的代码:
private void cmdPrevious_Click(object sender,RoutedEventArgs e)
{
Person[] peoples = this.FindResource(\"myPeoples\") as Person[];
System.ComponentModel.ICollectionView collectionView = CollectionViewSource.GetDefaultView(peoples);
collectionView.MoveCurrentToPrevious();
}
private void cmdNext_Click(object sender,RoutedEventArgs e)
{
Person[] peoples = this.FindResource(\"myPeoples\") as Person[];
System.ComponentModel.ICollectionView collectionView = CollectionViewSource.GetDefaultView(peoples);
collectionView.MoveCurrentToNext();
}