我正在约束的模型
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;
}
答案 0 :(得分:0)
这里的问题是
SelectedItem="{Binding Path=Task, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
。
您的TelematicsTask
课程中没有TelematicsEvent
类型的媒体资源。组合框中的项目类型为TelematicsTask
,当您将所选项目TelematicsTask
实例绑定到字符串时,它会通过调用ToString()
来设置值。删除SelectedItem
绑定,就可以了。