# Unity IPostBuildPlayerScriptDLLs Unity IPostBuildPlayerScriptDLLs是Unity引擎中的一個非常有用的功能,它可以讓開發者在構建項目後自定義哪些文件需要被覆制到輸出目錄中。這個功能可以幫助開發者更好地控制項目的構建過程,確保輸出目錄只 ...
WPF入門教程系列目錄 WPF入門教程系列二——Application介紹 WPF入門教程系列四——Dispatcher介紹 WPF入門教程系列十一——依賴屬性(一) WPF入門教程系列十五——WPF中的數據綁定(一)
五、DataGrid的DataGridComboBoxColumn列的綁定方式
在上一篇文章的示例中,存在一個問題,在點擊“刷新”按鈕之後,城市這個ComboBox列的數據沒有顯示。
DataGridComboBoxColumn列如果要填充數據,首先要設置列的ItemsSouce屬性,而且這個屬性對於要綁定的數據源有以下的要求:
- 1、靜態資源。有關更多信息,請參見 StaticResource 標記擴展。
- 2、x: 靜態代碼實體。有關更多信息,請參見 x:Static 標記擴展。
- 3、ComboBoxItem 類型的內聯集合。
1. 在使用DataGrid的時候,有時候需要使某些列為ComboBox,這時自然想到使用DataGridComboBoxColumn,但是如果使用的是ItemsSource數據綁定後臺的對象,就會發現,這根本就不能用。
2.在Visual Studio 2022中打開MainWindow.cs文件,添加下拉框的綁定代碼。具體代碼如下:
private void BindDrp()
{
cboCity.ItemsSource=GetCitys();
}
private void btnRefresh_Click(object sender, RoutedEventArgs e)
{
BindGrid();
BindDrp();
}
3. 在Visual Studio 2022中打開MainWindow.xaml文件,對DataGridComboBoxColumn進行了數據綁定。具體代碼如下。
<DataGridComboBoxColumn Header="城市" Width="120" x:Name="cboCity" ClipboardContentBinding="{x:Null}"
SelectedValuePath="Code" SelectedValueBinding="{Binding Path=CityCode,UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name" SelectedItemBinding="{x:Null}" />
其中SelectedValuePath與DisplayMemberPath是指將綁定到DataGridComboBoxColumn列上的類中的哪個屬性。例如上面的代碼,code屬性做為value值,Name屬性做為在界面上呈現。
通過SelectedValueBinding綁定的值,這個值由SelectedValuePath 所綁定的屬性確定,呈現綁定對象上的屬性。
例如上述代碼中,將SelectedValueBinding綁定到CityCode,當屬性綁定發生變化時。通過SelectedValuePath=Code,表示我們通過Code這個關鍵字進行搜索,搜索綁定對象的Code值是否與CityCode值相同,相同返回City對象,而City對象中有Code屬性和Name屬性,並以Name屬性進行顯示。
4. 在Visual Studio 2022中按F5鍵,運行WFP應用程式,使用滑鼠左鍵,點擊“刷新”按鈕,DataGrid中的城市列預設顯示正確的綁定數據,如下圖。
5. 下麵是全部完成之後的實際的XAML代碼。
<Window x:Class="WpfGridDemo.NET7.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:WpfGridDemo.NET7"
mc:Ignorable="d"
Title="MainWindow" Height="600" Width="960">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
</Grid.RowDefinitions>
<DataGrid x:Name="gridArea" Grid.Row="1" d:ItemsSource="{d:SampleData ItemCount=5}" AutoGenerateColumns="False"
HorizontalAlignment="Left" VerticalAlignment="Top">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="城市" Width="120" x:Name="cboCity" ClipboardContentBinding="{x:Null}"
SelectedValuePath="Code" SelectedValueBinding="{Binding Path=CityCode,UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name" SelectedItemBinding="{x:Null}" />
<DataGridTextColumn Header="縣區鎮" Width="*" Binding="{Binding Name}" ClipboardContentBinding="{x:Null}"/>
<DataGridTextColumn Header="郵編" Width="100" Binding="{Binding Code}" ClipboardContentBinding="{x:Null}"/>
<DataGridTextColumn Header="創建時間" Width="160" Binding="{Binding Created}" ClipboardContentBinding="{x:Null}"/>
<DataGridTextColumn Header="更新時間" Width="160" Binding="{Binding Updated}" ClipboardContentBinding="{x:Null}"/>
</DataGrid.Columns>
</DataGrid>
<WrapPanel Grid.Row="2">
<Button x:Name="btnRefresh" Height="22" Width="120" Click="btnRefresh_Click">刷新</Button>
<Button x:Name="btnSave" Height="22" Width="120">保存</Button>
</WrapPanel>
</Grid>
</Window>
6.MainWidow.cs的全部代碼,如下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
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;
using WpfGridDemo.NET7.Entitys;
namespace WpfGridDemo.NET7
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
GridDbContext db = new GridDbContext();
protected List<City> GetCitys()
{
List<City> list = db.City.ToList<City>();
return list;
}
protected List<Area> GetAreas()
{
List<Area> list = db.Area.ToList<Area>();
return list;
}
protected List<Province> GetProvinces()
{
List<Province> list = db.Province.ToList<Province>();
return list;
}
private void BindGrid()
{
gridArea.ItemsSource = GetAreas();
}
private void BindDrp()
{
cboCity.ItemsSource=GetCitys();
}
private void btnRefresh_Click(object sender, RoutedEventArgs e)
{
BindGrid();
BindDrp();
}
}
}