Silverlight 4.0 在silverlight 4中的datagrid内部单元格编辑模板中将Combobox动态更改为TextBox
我正在用Silverlight 4做申请。我面临一个问题,当同一行的特定列值(使用combobox)更改时,我需要以编程方式将特定combobox更改为textbox。我需要在事件cellEditEnded上更改此设置 请注意,我需要将celleditingtemplate组合框更改为textbox而不是celltemplate textblock 这是我的专栏,在这里我需要决定它的组合框选择值Silverlight 4.0 在silverlight 4中的datagrid内部单元格编辑模板中将Combobox动态更改为TextBox,silverlight-4.0,Silverlight 4.0,我正在用Silverlight 4做申请。我面临一个问题,当同一行的特定列值(使用combobox)更改时,我需要以编程方式将特定combobox更改为textbox。我需要在事件cellEditEnded上更改此设置 请注意,我需要将celleditingtemplate组合框更改为textbox而不是celltemplate textblock 这是我的专栏,在这里我需要决定它的组合框选择值 <sdk:DataGridTemplateColumn Header="Instructio
<sdk:DataGridTemplateColumn Header="Instruction Type"
CanUserResize="False" CanUserReorder="False">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Margin="2" Text="{Binding operationType}" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
<sdk:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox x:Name="instruction" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>
我在等待任何能帮助我的天才。这里是一个有效的例子 这是源代码 xaml代码
添加
骡子
sdas
达斯达斯达斯德
C#代码
命名空间DataGridTrick { 公共部分类主页面:UserControl { 公共主页() { 初始化组件(); 已加载+=新路由EventHandler(主页面_已加载); } 已加载无效主页(对象发送器、路由目标) { dataGrid1.ItemsSource=新列表() { 新指令(){operationType=“ADD”,destination=“sdas”}, 新指令(){operationType=“ADD”,destination=“dasdasd”} }; } 私有void dataGrid1\u PreparingCellForEdit(对象发送方,DataGridPreparingCellForEditEventArgs e) { if((字符串)e.Column.Header==“Destination”) { var tb=e.EditingElement.FindName(“destinationTextBox”)作为文本框; var cb=e.EditingElement.FindName(“destinationComboBox”)作为ComboBox; var指令=e.EditingElement.DataContext作为指令; if(tb==null | | cb==null | |指令==null) { 抛出新的 例外(“这里出了点问题……这不一定会发生!!”; } 其他的 { if(指令.操作类型==“MUL”) { tb.DataContext=e.EditingElement.DataContext; cb.DataContext=null; tb.Visibility=System.Windows.Visibility.Visible; cb.Visibility=System.Windows.Visibility.Collapsed; } 其他的 { tb.DataContext=null; cb.DataContext=e.EditingElement.DataContext; tb.Visibility=System.Windows.Visibility.Collapsed; cb.Visibility=System.Windows.Visibility.Visible; } } } } } 公共课堂教学 { 公共字符串操作类型{get;set;} 公共字符串目标{get;set;} } }
编辑了一点答案(您不必在数据中实现INotifyPropertyChanged,以使此示例生效)好的,谢谢Ai_Boy先生。你的代码正在运行。你真是和蔼可亲。。!!
<sdk:DataGridTemplateColumn Header="Destination">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Margin="2" Text="{Binding destination}" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
<sdk:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox x:Name="destination"/>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>
public class Instruction
{
public string operationType { get; set; }
public string destination { get; set; }
}
private void myGrid_CellEditEnded(object sender, DataGridCellEditEndedEventArgs e)
{
DataGrid obj = (DataGrid)sender;
Instruction obj1 = (Instruction)obj.SelectedItem;
if (e.Column.Header.ToString() == "Instruction Type")
{
if (obj1.operationType == "ADD" || obj1.operationType == "SUB")
{
// Here I need Require Code ????/
}
}
}
<Grid x:Name="LayoutRoot" Background="White">
<sdk:DataGrid x:Name="dataGrid1" AutoGenerateColumns="False"
PreparingCellForEdit="dataGrid1_PreparingCellForEdit">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="Instruction Type">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Margin="2" Text="{Binding operationType}" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
<sdk:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox x:Name="instruction"
SelectedValue="{Binding operationType, Mode=TwoWay}">
<s:String>ADD</s:String>
<s:String>MUL</s:String>
</ComboBox>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn Header="Destination">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Margin="2" Text="{Binding destination}" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
<sdk:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<Grid>
<ComboBox x:Name="destinationComboBox"
SelectedValue="{Binding destination, Mode=TwoWay}">
<s:String>sdas</s:String>
<s:String>dasdasdasd</s:String>
</ComboBox>
<TextBox x:Name="destinationTextBox"
Text="{Binding destination, Mode=TwoWay}"
Visibility="Collapsed"/>
</Grid>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</Grid>
namespace DataGridTrick
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
Loaded += new RoutedEventHandler(MainPage_Loaded);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
dataGrid1.ItemsSource = new List<Instruction>()
{
new Instruction(){operationType = "ADD", destination ="sdas"},
new Instruction(){operationType = "ADD", destination = "dasdasdasd"}
};
}
private void dataGrid1_PreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e)
{
if ((string)e.Column.Header == "Destination")
{
var tb = e.EditingElement.FindName("destinationTextBox") as TextBox;
var cb = e.EditingElement.FindName("destinationComboBox") as ComboBox;
var instruction = e.EditingElement.DataContext as Instruction;
if (tb == null || cb == null || instruction == null)
{
throw new
Exception("Something wrong here.. this dosen't have to happen!!");
}
else
{
if (instruction.operationType == "MUL")
{
tb.DataContext = e.EditingElement.DataContext;
cb.DataContext = null;
tb.Visibility = System.Windows.Visibility.Visible;
cb.Visibility = System.Windows.Visibility.Collapsed;
}
else
{
tb.DataContext = null;
cb.DataContext = e.EditingElement.DataContext;
tb.Visibility = System.Windows.Visibility.Collapsed;
cb.Visibility = System.Windows.Visibility.Visible;
}
}
}
}
}
public class Instruction
{
public string operationType { get; set; }
public string destination { get; set; }
}
}