我在將專案從串列中獲取到 WPF 資料網格中的組合框列時遇到問題。這對我來說是新的,所以任何幫助將不勝感激。似乎有很多方法可以做到,但我無法讓其中任何一種發揮作用。
'''
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Positionname}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox x:Name="poscombo Loaded="comboposloaded"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
在后面的代碼中列出資料
List<Positions> PositionList = new List<Positions>();
更新:我最終添加了一個加載事件來將串列作為專案源。現在的問題是如何將組合框中的選定值回傳到文本塊中?
添加 C# 以加載組合。
private void comboposloaded(object sender, RoutedEventArgs e)
{
ComboBox cmb = (ComboBox)sender;
cmb.ItemsSource = PositionList;
cmb.DisplayMemberPath = "info";
cmb.SelectedValuePath = "psnme";
}
uj5u.com熱心網友回復:
現在的問題是如何將組合框中的選定值回傳到文本塊中?
psnme將Positions物件的Positionname屬性系結到資料物件的屬性:
<ComboBox x:Name="poscombo" Loaded="comboposloaded"
SelectedValue="{Binding Positionname, UpdateSourceTrigger=PropertyChanged}"/>
uj5u.com熱心網友回復:
DataGridComboBoxColumn 的資料系結看起來比您想象的要復雜一些。
- 使用 ObservableCollection 而不是 List。這將自動更新 DataGrid 的內容。
- 您可以使用 ObjectDataProvide 將資料加載到組合框中。這也將確保源中的資料自動更新。這是一個作業示例。
public partial class MainWindow : Window
{
public EmployeeViewModel EmployeeVM;
public MainWindow()
{
InitializeComponent();
EmployeeVM = new EmployeeViewModel();
MyDataGrid.ItemsSource = EmployeeVM.EmployeeList;
}
}
public class Employee
{
public string Name { get; set; }
public PositionEnum Position { get; set; }
}
public enum PositionEnum { Marketeer, Mechanic, Accountant };
public class EmployeeViewModel
{
public ObservableCollection<Employee> EmployeeList =
new ObservableCollection<Employee>();
public EmployeeViewModel()
{
EmployeeList.Add(new Employee()
{ Name = "James Smith", Position = PositionEnum.Accountant });
EmployeeList.Add(new Employee()
{ Name = "Robert Johnson", Position = PositionEnum.Marketeer });
EmployeeList.Add(new Employee()
{ Name = "David Williams", Position = PositionEnum.Mechanic });
}
}
XAML
<Window x:Class="WpfApp6.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:core="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:WpfApp6"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800" >
<Window.Resources>
<!--Create list of enumeration values-->
<ObjectDataProvider x:Key="myEnum" MethodName="GetValues" ObjectType="{x:Type core:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type Type="local:PositionEnum"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<Grid>
<DataGrid x:Name="MyDataGrid"
AutoGenerateColumns="False"
HorizontalAlignment="Left"
VerticalAlignment="Top"
RowHeaderWidth="0" >
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding Name}"
Header="Name" />
<DataGridComboBoxColumn
Header="Order Status"
SelectedItemBinding="{Binding Position}"
ItemsSource="{Binding Source={StaticResource myEnum}}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>

認為您需要熟悉 MVVM 模式并將其用作構建此類應用程式的基礎。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/363184.html
下一篇:WPFReactiveUI系結Listbox.ItemsSource到ReadOnlyObservableCollection不起作用
