首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

WPF,这个绑定源如何是集合呢

2013-09-06 
WPF,这个绑定源怎么是集合呢?Grid HorizontalAlignmentLeft Height368 VerticalAlignmentTop Wi

WPF,这个绑定源怎么是集合呢?


<Grid HorizontalAlignment="Left" Height="368" VerticalAlignment="Top" Width="596">
    <TextBlock HorizontalAlignment="Left" Margin="84,34,0,0" TextWrapping="Wrap" Text="姓名:" VerticalAlignment="Top"/>
    <TextBox HorizontalAlignment="Left" Height="23" Margin="123,30,0,0" TextWrapping="Wrap" Text="{Binding Path=Name}" VerticalAlignment="Top" Width="120"/>
    <TextBlock HorizontalAlignment="Left" Margin="84,72,0,0" TextWrapping="Wrap" Text="年龄:" VerticalAlignment="Top"/>
    <TextBox HorizontalAlignment="Left" Height="23" Margin="123,68,0,0" TextWrapping="Wrap" Text="{Binding Path=Age}" VerticalAlignment="Top" Width="120"/>
    <TextBlock HorizontalAlignment="Left" Margin="84,111,0,0" TextWrapping="Wrap" Text="地址:" VerticalAlignment="Top"/>
<TextBox HorizontalAlignment="Left" Height="23" Margin="123,107,0,0" TextWrapping="Wrap" Text="{Binding Path=Adress}" VerticalAlignment="Top" 
Width="120"/>
    <Button Name="cmdprev" Content="&lt;" HorizontalAlignment="Left" Margin="154,167,0,0" HorizontalContentAlignment="Center" VerticalAlignment="Top" Height="26" Click="cmdprev_Click"/>
    <Button Name="cmdnext" Content="&gt;" HorizontalAlignment="Left" Margin="197,167,0,0" HorizontalContentAlignment="Center" VerticalAlignment="Top" Height="26" Click="cmdnext_Click"/>
    <TextBlock Name="textblock1" HorizontalAlignment="Left" Margin="173,172,0,0" TextWrapping="Wrap" Text="10" VerticalAlignment="Top"/>
</Grid>


public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        List<Person> list = new List<Person>() 
        {
            new Person(){Name="熊俊",Adress="北京",Age=43},
            new Person(){Name="张三",Adress="美国",Age=52},
            new Person(){Name="李四",Adress="英国",Age=45},
        };
        this.DataContext = list;


        view = (ListCollectionView)CollectionViewSource.GetDefaultView(this.DataContext);
        view.CurrentChanged += view_CurrentChanged;
    }
    private ListCollectionView view; 
    void view_CurrentChanged(object sender, EventArgs e)
    {
        textblock1.Text = (view.CurrentPosition + 1).ToString() + "/" + view.Count.ToString();
        cmdprev.IsEnabled = view.CurrentPosition > 0;  
        cmdnext.IsEnabled = view.CurrentPosition < view.Count - 1;
    }
    private void cmdprev_Click(object sender, RoutedEventArgs e)
    {
        view.MoveCurrentToPrevious(); 
    }
    private void cmdnext_Click(object sender, RoutedEventArgs e)
    {
        view.MoveCurrentToNext(); 

    }        
}

class Person
{
    public string Name { get; set; }
    public string Adress { get; set; }
    public int Age { get; set; }
}



此示例中,当单击按钮后,会向前、向后显示信息。不懂的是,这些TextBox的Text属性的绑定源应该是当前项对象才合理,然后才根据Path显示对应的属性值。然而,这里绑定源怎么是集合呢?
[解决办法]
是View绑定了集合,它自动将当前的那条记录绑定给控件,通过MoveCurrentToXXX让View改变当前观察的记录。
[解决办法]
   //
        // 摘要:
        //     将视图中位于 System.Windows.Data.CollectionView.CurrentItem 之后的项设置为 System.Windows.Data.CollectionView.CurrentItem。


        //
        // 返回结果:
        //     如果最终的 System.Windows.Data.CollectionView.CurrentItem 是视图中的项,则为 true;否则为 false。
        public virtual bool MoveCurrentToNext();
  //
        // 摘要:
        //     将视图中位于 System.Windows.Data.CollectionView.CurrentItem 之前的项设置为 System.Windows.Data.CollectionView.CurrentItem。
        //
        // 返回结果:
        //     如果最终的 System.Windows.Data.CollectionView.CurrentItem 是视图中的项,则为 true;否则为 false。
        public virtual bool MoveCurrentToPrevious();
[解决办法]
    private void cmdprev_Click(object sender, RoutedEventArgs e)
        {
            view.MoveCurrentToPrevious();
            Person per = view.CurrentItem as Person;//当前的项
        }
        private void cmdnext_Click(object sender, RoutedEventArgs e)
        {
            view.MoveCurrentToNext();
            Person per = view.CurrentItem as Person;//当前的项
        }
断点跟调试看看
[解决办法]
http://msdn.microsoft.com/zh-tw/beginner/system.windows.data.collectionview(zh-cn,VS.100).aspx
[解决办法]
http://blog.csdn.net/lhx527099095/article/details/8088870

看看这个吧

热点排行