回答編集履歴

1

見直しキャンペーン中

2023/07/26 13:12

投稿

TN8001
TN8001

スコア9855

test CHANGED
@@ -1,159 +1,80 @@
1
1
  簡単にやるなら`IsReadOnly="False"`のまま、通常行を`BeginningEdit`でキャンセルすることですかね。
2
2
 
3
+ xamlだけでやれないこともなさそうなんですが、面倒そうなので考えるのを諦めました^^;
3
4
 
4
-
5
- xamlだけ(`BindingProxy`は除く)でやれないこともなさそうなんですが、面倒そうなので考えるのを諦めました^^;
6
-
7
-
8
-
9
- ```xaml
5
+ ```xml
10
-
11
6
  <Window
12
-
13
7
  x:Class="Questions316745.MainWindow"
14
-
15
8
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
16
-
17
9
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
18
-
19
10
  Width="800"
20
-
21
11
  Height="450">
22
-
23
12
  <Grid>
24
-
25
13
  <DataGrid
26
-
27
14
  AutoGenerateColumns="False"
28
-
29
15
  BeginningEdit="DataGrid_BeginningEdit"
30
-
31
16
  ItemsSource="{Binding Items}">
32
-
33
17
  <DataGrid.Columns>
34
-
35
18
  <!--<DataGridTextColumn Binding="{Binding Id}" Header="ID" IsReadOnly="True" />-->
36
-
37
19
  <DataGridTextColumn Binding="{Binding Id}" Header="ID" />
38
-
39
20
  <DataGridTextColumn Binding="{Binding Name}" Header="名前" />
40
-
41
21
  <DataGridTextColumn Binding="{Binding Description}" Header="説明" />
42
-
43
22
  </DataGrid.Columns>
44
-
45
23
  </DataGrid>
46
-
47
24
  </Grid>
48
-
49
25
  </Window>
50
-
51
26
  ```
52
27
 
53
-
54
-
55
- ```C#
28
+ ```cs
56
-
57
29
  using Prism.Mvvm;
58
-
59
30
  using System.Collections.ObjectModel;
60
-
61
31
  using System.Windows;
62
-
63
32
  using System.Windows.Controls;
64
33
 
65
-
66
-
67
34
  namespace Questions316745
68
-
69
35
  {
70
-
71
36
  public class Item : BindableBase
72
-
73
37
  {
74
-
75
38
  private int _Id;
76
-
77
39
  public int Id { get => _Id; set => SetProperty(ref _Id, value); }
78
40
 
79
-
80
-
81
41
  private string _Name;
82
-
83
42
  public string Name { get => _Name; set => SetProperty(ref _Name, value); }
84
43
 
85
-
86
-
87
44
  private string _Description;
88
-
89
45
  public string Description { get => _Description; set => SetProperty(ref _Description, value); }
90
-
91
46
  }
92
47
 
93
-
94
-
95
48
  public partial class MainWindow : Window
96
-
97
49
  {
98
-
99
50
  public ObservableCollection<Item> Items { get; }
100
51
 
101
-
102
-
103
52
  public MainWindow()
104
-
105
53
  {
106
-
107
54
  InitializeComponent();
108
55
 
109
-
110
-
111
56
  Items = new ObservableCollection<Item>
112
-
113
57
  {
114
-
115
58
  new Item{ Id = 1, Name = "hoge", Description = "aaa", },
116
-
117
59
  new Item{ Id = 2, Name = "fuga", Description = "bbb", },
118
-
119
60
  new Item{ Id = 3, Name = "piyo", Description = "ccc", },
120
-
121
61
  };
122
62
 
123
-
124
-
125
63
  DataContext = this;
126
-
127
64
  }
128
65
 
129
-
130
-
131
66
  private void DataGrid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
132
-
133
67
  {
134
-
135
68
  // もうちょっとましな判定法あると思うw
136
-
137
69
  if (e.Column.Header.ToString() == "ID" && !e.Row.IsNewItem)
138
-
139
70
  e.Cancel = true;
140
-
141
71
  }
142
-
143
72
  }
144
-
145
73
  }
146
-
147
74
  ```
148
-
149
75
  `INotifyPropertyChanged`に[Prism.Core](https://www.nuget.org/packages/Prism.Core/8.0.0.1909?_src=template)を使用しました。
150
-
151
-
152
76
 
153
77
  ---
154
78
 
155
-
156
-
157
79
  しかしこういった要件というのは、ユニークなID等の列ではないのですか?
158
-
159
80
  バリデーションをかけるなら既存行も編集可にしてもよいですし、自動採番なら新規行も編集させたくないですよね?