WPF系列:GridView列綁定控件(一)


    最近,在WPF方面的UI設計,設計很多控件的綁定和布局,因為剛開始學習,所以,有很多東西不是很懂,一邊在網上搜,一邊試着做,因為設計到在GridView中綁定控件,所有,在網上搜了搜,看了一篇很好的帖子,自己學着做了做,現在就總結一個WPF中如何在GridView中列中綁定其他的控件。為了增加效果,在WPF項目中用到了一個第三方的控件telerik,后面附加上相關的dll引用,在WPF項目中自己添加到自己的項目中就可以使用了。

   首先,貼出我綁定后的GirdView的效果圖:

   

由於采用了telerik:StyleManager.Theme="Windows7"風格,所有可能看起來不是很像GridView,下面就給出xaml代碼:

  <telerik:RadGridView  ShowGroupPanel="False" AutoGenerateColumns="False" 
x:Name="grd1" ItemsSource="{Binding Path=LstData, Mode=TwoWay}" SelectionMode="Extended" RowHeight="50"     telerik:StyleManager.Theme="Windows7">
                <telerik:RadGridView.Columns>
                    <telerik:GridViewSelectColumn  />
                    <telerik:GridViewColumn Header="層次">
                        <telerik:GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock x:Name="txtName" Text="{Binding Level,Mode=TwoWay}" 
VerticalAlignment="Center" Height="22"></TextBlock>
                            </DataTemplate>
                        </telerik:GridViewColumn.CellTemplate>
                    </telerik:GridViewColumn>

                    <telerik:GridViewColumn Header="厚度" Width="80">
                        <telerik:GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBox x:Name="txtAge"
VerticalAlignment="Center" Height="22"></TextBox>
                            </DataTemplate>
                        </telerik:GridViewColumn.CellTemplate>
                    </telerik:GridViewColumn>

                    <telerik:GridViewColumn Header="顏色" Width="120">
                        <telerik:GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <telerik:RadComboBox Margin="5,0,0,0" 
Width="60" Height="20"   ItemsSource="{Binding BaseColor}" VerticalAlignment="Center" x:Name="btnSub">

                                    </telerik:RadComboBox>
                                    <telerik:RadColorPicker></telerik:RadColorPicker>
                                </StackPanel>
                            </DataTemplate>
                        </telerik:GridViewColumn.CellTemplate>

                    </telerik:GridViewColumn>
                    <telerik:GridViewColumn Header="結構" Width="95">
                        <telerik:GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <telerik:RadComboBox Margin="5,0,0,0" 
Width="60" Height="20"   ItemsSource="{Binding Structure}" VerticalAlignment="Center" x:Name="btnSub">

                                    </telerik:RadComboBox>
                                </StackPanel>
                            </DataTemplate>
                        </telerik:GridViewColumn.CellTemplate>

                    </telerik:GridViewColumn>
                </telerik:RadGridView.Columns>
            </telerik:RadGridView>

  上面要添加telerik的引用 :xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"

這樣,就可以在GridView的每一個列上加上想要的控件了,下面是后台的代碼,由於是第一個版本,所有代碼很多都沒有完善,但是,基本的界面顯示功能已經可以實現:

 private string[] _StructureData = { "致密", "較致密", "疏松", "較疏松", "性脆易碎", "其他" };
        private string[] _BaseColorData = { "亮黑色", "褐黑色", "黑色", "褐色", "其他" };
        LevelCollection pc = new LevelCollection();
        public CobaltRichCrustUIGroupBoxLevel()
        {
            InitializeComponent();
        }

        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            pc.LstData.Add(new LevelInfo() { Level = "I", Structure = _StructureData.ToList(), BaseColor = _BaseColorData.ToList() });
            pc.LstData.Add(new LevelInfo() { Level = "II", Structure = _StructureData.ToList(), BaseColor = _BaseColorData.ToList() });
            pc.LstData.Add(new LevelInfo() { Level = "III", Structure = _StructureData.ToList(), BaseColor = _BaseColorData.ToList() });
            pc.LstData.Add(new LevelInfo() { Level = "IV", Structure = _StructureData.ToList(), BaseColor = _BaseColorData.ToList() });
            pc.LstData.Add(new LevelInfo() { Level = "V", Structure = _StructureData.ToList(), BaseColor = _BaseColorData.ToList() });
            pc.LstData.Add(new LevelInfo() { Level = "VI", Structure = _StructureData.ToList(), BaseColor = _BaseColorData.ToList() });
            this.DataContext = pc;
        }
        private void btnAdd_Click(object sender, RoutedEventArgs e)
        {

        }

        private void btnSub_Click(object sender, RoutedEventArgs e)
        {

        }


    }
    public class LevelCollection
    {
        private ObservableCollection<LevelInfo> lstData = new ObservableCollection<LevelInfo>();

        public ObservableCollection<LevelInfo> LstData
        {
            get { return lstData; }
            set { lstData = value; }
        }
    }

    public class LevelInfo : INotifyPropertyChanged
    {

        public event PropertyChangedEventHandler PropertyChanged;

        private string _Level = "";
        private List<string> _Structure = new List<string>();
        private List<string> _BaseColor = new List<string>();

        public List<string> BaseColor
        {
            get { return _BaseColor; }
            set
            {
                _BaseColor = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("BaseColor"));
                }
            }
        }

        public List<string> Structure
        {
            get { return _Structure; }
            set
            {
                _Structure = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("Structure"));
                }
            }
        }

        public string Level
        {
            get { return _Level; }
            set
            {
                _Level = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("Level"));
                }
            }
        }
    }

  上面的代碼很多都是Copy網上的程序,只是經過稍微修改可以使用了,具體的很多命名都沒有進行規范,后期版本在處理數據時,會進行命名規范。

Telerik相關的dll文件:Telerik.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM