[英]WPF ComboBox Showing ModelName rather than value after updating
我綁定的模型
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;
}
這里的問題是
SelectedItem="{Binding Path=Task, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
。
您在TelematicsEvent
類中沒有類型TelematicsTask
屬性。 組合框中的項目是TelematicsTask
類型,當您將所選項目(即TelematicsTask
實例)綁定到字符串時,它通過在其上調用ToString()
來設置值。 刪除SelectedItem
綁定,就可以了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.