我想知道在引发comboBox的SelectionChanged事件时是否可以为datagrid列赋值?
例如,
在DataGrid中的一个ComboBox中我有2个值" 0"和" 1"
如果用户选择" 0" - 网格内的另一列和名为ID的同一行将显示" 0"那么如果用户决定选择" 1"然后,同一行中的ID将更改为" 1"
另一件事是我已将这些数据放在ObservableCollection中,所以基本上如果组合为0,那么我需要从ObservableCollection中获取ID为0。
我希望这是可以理解的。
------代码-------
<DataGrid.Columns>
<DataGridComboBoxColumn SelectedValueBinding="{Binding CID}" SelectedValuePath="CID" Header="CID" Width="70">
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<!--<EventSetter Event="SelectionChanged" Handler="abc"></EventSetter>-->
<Setter Property="ItemsSource"
Value="{Binding DataContext.EntityCollection,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=Window}}"/>
<Setter Property="DisplayMemberPath" Value="CID"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource"
Value="{Binding DataContext.EntityCollection,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=Window}}"/>
<Setter Property="DisplayMemberPath" Value="CID"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.HeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment"
Value="Center" />
</Style>
</DataGridComboBoxColumn.HeaderStyle>
</DataGridComboBoxColumn>
<DataGridTextColumn Header="UID" Binding="{Binding EntityCollection.UID}" Width="70">
</DataGridTextColumn>
基本上,我想要&#34; UID&#34; TextColumn将更新为用户在CID组合框中选择的ID中的ID。
干杯
答案 0 :(得分:0)
将ComboBox的SelectedItem属性设置为与名为SelectedItem的成员绑定:
<DataGridComboBoxColumn SelectedValueBinding="{Binding CID}" SelectedItem="{Binding SelectedItem}" SelectedValuePath="CID" Header="CID" Width="70">
然后设置一个名为SelectedItem的成员,如下所示:
private int _selectedItem;
public int SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
OnPropertyChanged("SelectedItem");
}
}
然后在TextBox中,将绑定设置为SelectedItem:
<DataGridTextColumn Header="UID" Binding="{Binding SelectedItem.UID}" Width="70">
</DataGridTextColumn>
答案 1 :(得分:0)
将一个集合绑定到Datagrid combox列,并使用组合框中的选定项绑定另一个数据网格文本列。
<强> XAML 强>
<Window x:Class="ComboBoxDGWPF.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ComboBox DataGrid WPF" Height="300" Width="616"
xmlns:staticData="clr-namespace:ComboBoxDGWPF"
xmlns:controls="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit">
<Window.Resources>
<staticData:StatusList x:Key="StatusList"/>
</Window.Resources>
<Grid>
<controls:DataGrid x:Name="dgData" AutoGenerateColumns="False">
<controls:DataGrid.Columns>
<controls:DataGridTemplateColumn Header="Status" Width="100">
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Status}"/>
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox Height="22" ItemsSource="{StaticResource StatusList}" SelectedItem="{Binding Status}"/>
</DataTemplate>
</controls:DataGridTemplateColumn.CellEditingTemplate>
</controls:DataGridTemplateColumn>
<controls:DataGridTextColumn Binding="{Binding Status}" Header="Selected Status" Width="100"/>
</controls:DataGrid.Columns>
</controls:DataGrid>
</Grid>
</Window>
代码背后
using System.Collections.Generic;
using System.Windows;
using System.Windows.Documents;
namespace ComboBoxDGWPF
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
List<TicketInfo> ticketsList = new List<TicketInfo>
{
new TicketInfo{ Status="Open"},
new TicketInfo{ Status="Assigned"},
new TicketInfo{ Status="Open"},
new TicketInfo{ Status="Open"},
new TicketInfo{ Status="Closed"},
new TicketInfo{ Status="Open"},
new TicketInfo{ Status="Open"}
};
dgData.ItemsSource = ticketsList;
}
}
public class TicketInfo
{
public string Status { get; set; }
}
public class StatusList : List<string>
{
public StatusList()
{
this.Add("Assigned");
this.Add("Closed");
this.Add("In Progress");
this.Add("Open");
this.Add("Resolved");
}
}
}
类似文章发表Here