WPF动态GridView [英] WPF-Dynamic GridView

查看:88
本文介绍了WPF动态GridView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



每当我选择树状视图项目时,我都希望动态创建树状视图项目(这里是在for循环中创建),我想在新窗格中获取标签,但是在这里,如果我在树状视图项目中选择第二个项目,其在先前的面板中将被覆盖为第一个项目创建的.

请帮帮我.

Hi,

I need to create the treeview items dynamically (here am creating in for loop), whenever i select the tree view items i want to get the label in new pane but here If i select second item in tree view items its getting overwritten in previous panels which created for first items.

Please help me.

using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication7
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            Update();
        }

        private void Update()
        {
            TreeViewItem newChild = new TreeViewItem();
            newChild.Header = "Client";
            tv.Items.Add(newChild);

            for (int i = 0; i < 2; i++)
            {
                TreeViewItem newSubChild = new TreeViewItem();
                newSubChild.Header = "name" + i;
                newChild.Items.Add(newSubChild);
                          
                newSubChild.Selected += new RoutedEventHandler(newSubChild_Selected);
               
            }
        }

        void newSubChild_Selected(object sender, RoutedEventArgs e)
        {
            Grid dp = new Grid();
            dp.Height = 20;
            dp.Width = 100;
            
            Label lbServiceName = new Label();
            lbServiceName.Content = "Service Name:";
            lbServiceName.Height = 28;
            lbServiceName.Width = 120.001;

            dp.Children.Add(lbServiceName);
            this.grd2.Children.Add(dp);         
       }               
    }
}

推荐答案

最好仔细看一下数据绑定以解决此问题.
您可以这样创建模型:

It might be a good idea to take a good look at databinding to solve this issue.
You could create model like this:

public class MyViewModel: INotifyPropertyChanged
{
    private ObservableCollection<myhierarchicalitem> _myHierarchicalItems;
    private MyHierarchicalItem _selectedItem;

    public ObservableCollection<myhierarchicalitem>  MyHierarchicalItems
    {
        get { return _myHierarchicalItems; }
        set
        {
            _myHierarchicalItems = value;
            RaisePropertyChanged("MyHierarchicalItems");
        }
    }

    public MyHierarchicalItem SelectedItem 
    {
        get { return _selectedItem; }
        set 
        { 
            _selectedItem = value; 
            RaisePropertyChanged("SelectedItem");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void RaisePropertyChanged(string propertyName)
    {
        if(PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}</myhierarchicalitem></myhierarchicalitem>



将树视图中的选定项目绑定到模型.还要将另一个面板中的标签绑定到相同的属性.现在,如果您在树形视图中选择一个项目,则该项目的标签将自动绑定到另一个面板中.

有关数据绑定的更多信息,建议您看以下视频: http://channel9.msdn.com/posts/AdamKinney/Data-Binding-in-Windows-Presentation-Foundation/ [



Bind the selected item in the treeview to the model. Also bind the label in the other panel to the same property. Now if you select an item in the treeview, the label for that item will automatically be bound in the other panel.

For a bit more information on databinding I suggest you take a look at the following video: http://channel9.msdn.com/posts/AdamKinney/Data-Binding-in-Windows-Presentation-Foundation/[^]


这篇关于WPF动态GridView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆