【发布时间】:2014-11-07 06:07:48
【问题描述】:
我正在绑定的模型
namespace Project.Telematics_Plugin
{
public class TelematicsEvent
{
public int EventId { get;set; }
public String MethodName { get; set; }
public String Keyword { get;set; }
public String Opcode { get;set; }
public String Task { get;set; }
}
public class TelematicsKeyword
{
public string Keyword { get; set; }
}
public class TelematicsTask
{
public string Task { get;set; }
}
public class TelematicsOpcode
{
public string Opcode { get;set; }
}
}
XAML:
<DataGrid Name="dgMethods" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Event Id" Width="70" Binding="{Binding EventId}" />
<DataGridTextColumn Header="Event Name" Width="300" Binding="{Binding MethodName}" />
<DataGridTextColumn Header="Keywords" Width="200" Binding="{Binding Keyword}" />
<DataGridTextColumn Header="Opcodes" Width="200" Binding="{Binding Opcode}" />
<DataGridTemplateColumn Header="Tasks" MinWidth="300">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Task}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Path=DataContext, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
SelectedValuePath="{Binding Path=Task}"
DisplayMemberPath="Task" SelectedItem="{Binding Path=Task, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
当我运行如上所示的代码并尝试从下拉列表中编辑某些列时,如下所示
选择下拉列表的值后,它会在网格中显示带有完整命名空间的模型名称,而不是组合框所选项目的值。
我没有使用 MVVM ,只是用 WinForm 风格编写代码。 这是我在类 xaml.cs 后面的代码
public AddInScreen()
{
InitializeComponent();
Tasks = new List<TelematicsTask>();
Keywords = new List<TelematicsKeyword>();
Opcodes = new List<TelematicsOpcode>();
Events = new List<TelematicsEvent>();
Tasks.Add(new TelematicsTask() { Task = "ApplicationStarted" });
Tasks.Add(new TelematicsTask() { Task = "ApplicationClosed" });
Tasks.Add(new TelematicsTask() { Task = "ApplicationError" });
Keywords.Add(new TelematicsKeyword() { Keyword = "Application" });
Keywords.Add(new TelematicsKeyword() { Keyword = "DataAccess" });
Keywords.Add(new TelematicsKeyword() { Keyword = "UserInterface" });
Keywords.Add(new TelematicsKeyword() { Keyword = "Session" });
Opcodes.Add(new TelematicsOpcode() { Opcode = "Start" });
Opcodes.Add(new TelematicsOpcode() { Opcode = "Finish" });
Opcodes.Add(new TelematicsOpcode() { Opcode = "Error" });
Opcodes.Add(new TelematicsOpcode() { Opcode = "Closed" });
Events.Add(new TelematicsEvent() { EventId = 100, MethodName = "ApplicationStarted", Task= "ApplicationStarted", Keyword = "Application", Opcode = "Start" });
Events.Add(new TelematicsEvent() { EventId = 100, MethodName = "ApplicationClosed",Task= "ApplicationClosed", Keyword = "Application", Opcode = "Closed" });
Events.Add(new TelematicsEvent() { EventId = 100, MethodName = "ApplicationError",Task= "ApplicationError", Keyword = "Application", Opcode = "Error" });
grdTasks.Items.Clear();
grdKeywords.Items.Clear();
grdOpcodes.Items.Clear();
grdTasks.ItemsSource = Tasks;
grdOpcodes.ItemsSource = Opcodes;
grdKeywords.ItemsSource = Keywords;
dgMethods.ItemsSource = Events;
this.DataContext = Tasks;
}
【问题讨论】: