赞
踩
public class NotifyPropertyObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
if(PropertyChanged != null)
{
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
public class MyStudent: NotifyPropertyObject { private int _Num; public int Num { get { return _Num; } set { _Num = value; OnPropertyChanged("Num"); } } private bool _IsTest; public bool IsTest { get { return _IsTest; } set { _IsTest = value; OnPropertyChanged("IsTest"); } } private string _Name; public string Name { get { return _Name; } set { _Name = value; OnPropertyChanged("Name"); } } private int _Age; public int Age { get { return _Age; } set { _Age = value; OnPropertyChanged("Age"); } } private double _Score; public double Score { get { return _Score; } set { _Score = value; OnPropertyChanged("Score"); } } private string _State; public string State { get { return _State; } set { _State = value; OnPropertyChanged("State"); } } }
<Window x:Class="WPFBindingDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WPFBindingDemo" mc:Ignorable="d" Title="MainWindow" Height="650" Width="800"> <Grid> <Grid.Resources> <!--Create list of enumeration values--> <ObjectDataProvider x:Key="strList" ObjectType="{x:Type local:OSList}" MethodName="GetList"/> </Grid.Resources> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition /> </Grid.RowDefinitions> <Grid Grid.Column="1" Name="GridTable" Height="360" Background="Silver" Margin="2"> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="130"></ColumnDefinition> <ColumnDefinition Width="150"></ColumnDefinition> <ColumnDefinition Width="20"></ColumnDefinition> </Grid.ColumnDefinitions> <Label Width="130" Height="25" Grid.Row="0" Grid.Column="0" Name="label1">TwoWay</Label> <TextBox Width="150" Height="25" Grid.Row="0" Grid.Column="1" Name="textBox4" Text="{Binding ElementName=scrollBar1,Path=Value,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" /> <Label Width="130" Height="25" Grid.Row="1" Grid.Column="0" Name="label2">OneWay</Label> <TextBox Width="150" Height="25" Grid.Row="1" Grid.Column="1" Name="textBox1" Text="{Binding ElementName=scrollBar1, Path=Value,Mode=OneWay}"/> <Label Width="130" Height="25" Grid.Row="2" Grid.Column="0" Name="label3">OneWayToSource</Label> <TextBox Width="150" Height="25" Grid.Row="2" Grid.Column="1" Name="textBox2" Text="{Binding ElementName=scrollBar1, Path=Value,Mode=OneWayToSource}" /> <Label Width="130" Height="25" Grid.Row="3" Grid.Column="0" Name="label4">OneTime</Label> <TextBox Width="150" Height="25" Grid.Row="3" Grid.Column="1" Name="textBox3" Text="{Binding ElementName=scrollBar1, Path=Value,Mode=OneTime}"/> <ScrollBar Value="30" Minimum="0" Grid.RowSpan="4" Grid.Row="0" Grid.Column="3" Maximum="100" Name="scrollBar1" Width="18" Height="{Binding ElementName=GridTable,Path=Height}" /> </Grid> <Grid Margin="2" Background="GreenYellow" Grid.Row="1" Grid.Column="1"> <DataGrid x:Name="dataGridName" CanUserAddRows="False" AutoGenerateColumns="False" ItemsSource="{Binding MyStudentList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" CanUserSortColumns="False"> <DataGrid.Columns> <DataGridCheckBoxColumn Header="选择" Width="*" Binding="{Binding IsTest}"></DataGridCheckBoxColumn> <DataGridTextColumn Header="Num" Width="*" Binding="{Binding Num}"></DataGridTextColumn> <DataGridTextColumn Header="Name" Width="*" Binding="{Binding Name}"></DataGridTextColumn> <DataGridTextColumn Header="Age" Width="*" Binding="{Binding Age}"></DataGridTextColumn> <DataGridTextColumn Header="Score" Width="*" Binding="{Binding Score}"></DataGridTextColumn> <DataGridComboBoxColumn Header="State" Width="*" ItemsSource="{Binding Source={StaticResource strList}}" SelectedItemBinding="{Binding State}" TextBinding="{Binding State,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> </DataGridComboBoxColumn> <DataGridComboBoxColumn Header="State" Width="*" ItemsSource="{x:Static local:StrList.StateList}" SelectedItemBinding="{Binding State}" TextBinding="{Binding State,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> </DataGridComboBoxColumn> <!--<DataGridTemplateColumn Header="Image" Width="SizeToCells" IsReadOnly="True"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Image Source="{Binding Image}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>--> </DataGrid.Columns> </DataGrid> </Grid> </Grid> </Window>
public class OSList { string[] txList = new string[] { "1", "2", "3" }; public string[] GetList() { return this.txList; } } public class StrList { public static List<string> StateList { get; set; } static StrList() { StateList = new List<string>() { "1", "2", "3","4" }; } } /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public ViewModels.MainViewModel ViewModel { get { return App.MainViewModel; } } public List<MyStudent> MyStudentList = new List<MyStudent>(); public MainWindow() { InitializeComponent(); this.DataContext = ViewModel; this.Loaded += MainWindow_Loaded; } private void MainWindow_Loaded(object sender, RoutedEventArgs e) { MyStudentList = new List<MyStudent>(); for (int i = 0; i < 5; i++) { MyStudent myStudent = new MyStudent(); myStudent.Num = i+1; myStudent.IsTest = true; myStudent.Name = "d" + i.ToString(); myStudent.Age = i + 12; myStudent.Score = i + 78; myStudent.State = "1"; MyStudentList.Add(myStudent); } dataGridName.ItemsSource = null; dataGridName.ItemsSource = MyStudentList; } }
xaml代码:
<Grid>
<Grid.Resources>
<!--Create list of enumeration values-->
<ObjectDataProvider x:Key="strList"
ObjectType="{x:Type local:OSList}"
MethodName="GetList"/>
</Grid.Resources>
<DataGrid Name="DG1" ItemsSource="{Binding}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="下拉框测试"
SelectedItemBinding="{Binding sIdx}" ItemsSource="{Binding Source={StaticResource strList}}">
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
逻辑代码:
namespace DataBingTest { /// <summary> /// DB_DataGrid.xaml 的交互逻辑 /// </summary> public partial class DB_DataGrid : Window { public DB_DataGrid() { InitializeComponent(); List<Info> infoList = new List<Info>(); Info info02 = new Info(); info02.sIdx = "1"; infoList.Add(info02); info02 = new Info(); info02.sIdx = "2"; infoList.Add(info02); info02 = new Info(); info02.sIdx = "3"; infoList.Add(info02); DG1.DataContext = infoList; } } public class Info { public string sIdx { get; set; } } public class OSList { string[] txList = new string[] {"1" ,"2","3"}; public string[] GetList() { return this.txList; } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。