コードビハインドで書いたことがないので間違いがあるかもしれません。
myBinding.Source = stList; // ここが間違っていそう?
これ自体をなくせばいいんじゃないでしょうか。
ここからは余計なお世話かもしれませんが、検証中にはまったのでついでに書いておきます。
CustomTextBox
ってことは編集するつもりなのかなと思い、INotifyPropertyChanged
を実装して書き換えてみましたが値が反映されませんでした。
CellTemplate
とCellEditingTemplate
がありCellTemplate
のほうではTwoWay
にしようがダメみたいです(深堀はしていません)
cs
1using System.Collections.Generic;
2using System.ComponentModel;
3using System.Runtime.CompilerServices;
4using System.Windows;
5using System.Windows.Controls;
6using System.Windows.Data;
7using System.Windows.Media;
8
9namespace Questions240024
10{
11 public partial class MainWindow : Window
12 {
13 public MainWindow()
14 {
15 //InitializeComponent();
16
17 DataGrid dataGrid = new DataGrid();
18 dataGrid.ItemsSource = new List<Row>
19 {
20 new Row{ Text = "AAA" },
21 new Row{ Text = "BBB" },
22 new Row{ Text = "CCC" },
23 };
24
25 DataGridTextColumn cm = new DataGridTextColumn
26 {
27 Header = "TextColumn",
28 Binding = new Binding("Text")
29 };
30 dataGrid.Columns.Add(cm);
31
32
33 DataGridTemplateColumn temp = new DataGridTemplateColumn { Header = "TemplateColumn" };
34
35 FrameworkElementFactory cTextBlock = new FrameworkElementFactory(typeof(CustomTextBlock));
36 cTextBlock.SetBinding(TextBlock.TextProperty, new Binding("Text"));
37 temp.CellTemplate = new DataTemplate { VisualTree = cTextBlock };
38
39 FrameworkElementFactory cTextBox = new FrameworkElementFactory(typeof(CustomTextBox));
40 cTextBox.SetBinding(CustomTextBox.TextProperty, new Binding("Text"));
41 temp.CellEditingTemplate = new DataTemplate { VisualTree = cTextBox };
42
43 dataGrid.Columns.Add(temp);
44
45
46 AddChild(dataGrid);
47 }
48 }
49
50 internal class CustomTextBlock : TextBlock
51 {
52 public CustomTextBlock() : base() => Background = Brushes.LightPink;
53 }
54
55 internal class CustomTextBox : TextBox
56 {
57 public CustomTextBox() : base() => Background = Brushes.LightSkyBlue;
58 }
59
60 internal class Row : INotifyPropertyChanged
61 {
62 public string Text { get => _Text; set => SetProperty(ref _Text, value); }
63 private string _Text;
64
65 #region INotifyPropertyChanged
66 public event PropertyChangedEventHandler PropertyChanged;
67 protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName]string propertyName = null)
68 {
69 if(Equals(storage, value)) return false;
70 storage = value;
71 OnPropertyChanged(propertyName);
72 return true;
73 }
74 protected void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
75 #endregion
76 }
77}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/02/11 08:00