2016-12-23 1 views
1

私は8列のデータグリッドを含むXAMLウィンドウを持っています。これは2つのフラットファイルを読み込み、それらのファイルに含まれる値でデータグリッドを設定します。 (私はそれを行うためのコードは含まれていませんがうまく動作し、私の質問に関連していません。)ユーザーは、 "From"と "To"列の値を編集できますが、他人。現在のところ、ユーザーがセルをクリックすると、行全体が強調表示され(青色に)、クリックされたセルも太字の枠で強調表示されます。ユーザーが別のセルをクリックすると、何も起こりません(ただし、新しい行とセルが強調表示されます)。ユーザーがハイライト表示され、細胞に再びクリックするか、キーボードのキーを押した場合は、次のエラーを取得する:スローXAMLデータグリッドの値をユーザーが変更できるようにするにはどうすればよいですか?

例外:PresentationFramework.dll

の「System.InvalidOperationExceptionが」

追加情報:「EditItem」をこのビューでは許可されていません。

私は間違っていますか?ここで

は、XAMLの定義である:ここで

<Window x:Class="CrewPlanEditor.Validate" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d" 
     Title="Check Duties" Height="571" Width="753" MinWidth="674" MinHeight="431" Background="#b3d9ff" Icon="CrewPLAN.ico"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="100"/> 
      <ColumnDefinition Width="100"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="50"/> 
      <RowDefinition Height="50"/> 
     </Grid.RowDefinitions> 
     <DataGrid x:Name="DgValidate" Grid.ColumnSpan="3" FontWeight="Normal" ItemsSource="{Binding}" AutoGenerateColumns="False"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Width="60" Header="Crew" Binding="{Binding DutyNo}" /> 
       <DataGridTextColumn Width="60" Header="Run" Binding="{Binding BusNo}" /> 
       <DataGridTextColumn Width="60" Header="From" Binding="{Binding From}" /> 
       <DataGridTextColumn Width="60" Header="To" Binding="{Binding To}" /> 
       <DataGridTextColumn Width="60" Header="Brk" Binding="{Binding Next}" /> 
       <DataGridTextColumn Width="60" Header="Type" Binding="{Binding DutyTypeName}" /> 
       <DataGridTextColumn Width="60" Header="Depot" Binding="{Binding Depot}" /> 
       <DataGridTextColumn Width="60" Header="Cost" Binding="{Binding Cost}" /> 
      </DataGrid.Columns> 
     </DataGrid> 
    </Grid> 
</Window> 

は、その背後にあるC#のである:

using System.Windows; 
using CrewPlanEditor.Contexts; 
using IO = System.IO; 

namespace CrewPlanEditor 
{ 
    /// <summary> 
    /// Interaction logic for Validate.xaml 
    /// </summary> 
    public partial class Validate 
    { 
     public Validate(string jobFolder) 
     { 
      var dutiesFile = IO.Path.Combine(jobFolder, "Data", "Duties.txt"); 
      var dutyTypesFile = IO.Path.Combine(jobFolder, "Data", "DutyTypes.txt"); 
      var duties = new DutiesFileReader().ReadFile(null, dutiesFile, dutyTypesFile).GridDutyData; 
      DataContext = duties; 
      InitializeComponent(); 
     } 
    } 
} 

答えて

1

あなたはあなたの "GridDutyData" コレクションのタイプは編集をサポートしていることを確認する必要があります。 IListインターフェイスを実装する必要があります。 HashSet <T>ではなく、リスト<T>とObservableCollection doがあります。

そして、あなたが唯一のユーザーは「から」を編集すると、あなたがTrueに他の列のIsReadOnlyプロパティを設定することができ、列「にする」ことができるようにしたい場合:

<DataGridTextColumn Width="60" Header="Crew" Binding="{Binding DutyNo}" IsReadOnly="True" /> /> 

はまたていることを確認してください「From」および「To」プロパティにはパブリックセッターがあります。

関連する問題