簡體   English   中英

WPF組合框顯示ModelName而不是更新后的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM