2016-05-03 33 views
0

コンボボックスでデータグリッドテーブルを作成しましたが、エラーはありませんが、テーブルを編集するときにクリックするとこのエラーが発生します。 私はmahapps.metroを使用しています。別の空のプロジェクトの魔女で、私はこのコードを作成しても問題ありません。だからここで問題とどのように私はそれWPF Datagridドロップダウンボックス

An unhandled exception of type 'System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll 

Additional information: Provide value on 'System.Windows.Markup.StaticResourceHolder' threw an exception. 

そして、ここに問題がある修正する必要がありますされていますError 1 The resource "StatusList" could not be resolved.

ここでは、XAMLコードです:

<DataGrid x:Name="dgData" AutoGenerateColumns="False" Margin="169,10,10,227"> 
         <DataGrid.Columns> 
          <DataGridTextColumn Binding="{Binding Subject}" Header="GAME SETTINGS" Width="340"/> 
          <DataGridTemplateColumn Header="" Width="360"> 
           <DataGridTemplateColumn.CellTemplate> 
            <DataTemplate> 
             <TextBlock Text="{Binding Status}"/> 
            </DataTemplate> 
           </DataGridTemplateColumn.CellTemplate> 

           <DataGridTemplateColumn.CellEditingTemplate> 
            <DataTemplate> 
             <ComboBox Height="20" IsEditable="True" 
             ItemsSource="{StaticResource StatusList}" 
             SelectedItem="{Binding Status}"/> 
            </DataTemplate> 
           </DataGridTemplateColumn.CellEditingTemplate> 

          </DataGridTemplateColumn> 

         </DataGrid.Columns> 
        </DataGrid> 

そしてここで、ICのC#コード

public MainWindow() 
     { 
      InitializeComponent(); 
      this.DataContext = this; 
      this.Title += "Vuzimir/Normal - 0/2 - 2.0.14.15"; 
      List<TicketInfo> ticketsList = new List<TicketInfo> 
      { 
       new TicketInfo{ Subject="Show Ping", Status="True"}, 
       new TicketInfo{ Subject="Show Drawings", Status="True"}, 
       new TicketInfo{ Subject="Send Debug Messages", Status="True"}, 
       new TicketInfo{ Subject="Enable Default Profile", Status="False"} 
      }; 
      dgData.ItemsSource = ticketsList; 


     } 
     public class TicketInfo 
     { 
      public string Subject { get; set; } 
      public string Status { get; set; } 
     } 

     public class StatusList : List<string> 
     { 
      public StatusList() 
      { 
       this.Add("True"); 
       this.Add("False"); 
      } 
     } 
+0

xamlのどこにでもキー/名前 'StatusList'を持つ' StaticResource'がありますか? – bit

+0

「はい」の場合は、xamlの一部を表示できますか? – bit

+0

さて、StaticResource、「ItemsSource = "{StaticResource StatusList}" " –

答えて

0

コンボボックスのアイテムソースをバインドする場合は、単にコンボボックスのItemsSourceでバインディングを使用します。

<DataGridTemplateColumn.CellEditingTemplate> 
         <DataTemplate> 
          <ComboBox Height="20" IsEditable="True" 
             ItemsSource="{Binding StatusList}" 
             SelectedItem="{Binding Status}"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellEditingTemplate> 



    List<TicketInfo> ticketsList = new List<TicketInfo> 
      { 
       new TicketInfo{ Subject="Show Ping", Status="True",StatusList=new List<string>(){"True","False"}}, 
       new TicketInfo{ Subject="Show Drawings", Status="True",StatusList=new List<string>(){"True","False"}}, 
       new TicketInfo{ Subject="Send Debug Messages", Status="True",StatusList=new List<string>(){"True","False"}}, 
       new TicketInfo{ Subject="Enable Default Profile", Status="False",StatusList=new List<string>(){"True","False"}} 
      }; 



public class TicketInfo 
    { 
     public string Subject { get; set; } 

     private string _status; 
     public string Status 
     { 
      get { return _status; } 
      set { _status = value; } 
     } 
     private List<string> _statusList = new List<string>(); 
     public List<string> StatusList 
     { 
      get { return _statusList; } 
      set { _statusList = value; } 
     } 
    } 
+0

、私のコンボボックスをダブルクリックすると選択項目はなく、その空白はなくなります。 –

+0

TicketInfoクラスのリストはグリッドItemsSourceですので、コンボボックスアイテムソースリストをTicketInfoクラスに入れる必要があります。上記のコードを参照してください。 –