我正在学习如何制作Visual Studio样式属性网格。我有一个2列GridView,目前正确绑定到具有两个字符串成员的对象列表。目前很好。我希望第二列使用文本输入框,以便我可以更新这些值。 我在网上看了很多,但只能找到XAML的例子。到目前为止我得到的(不工作,只显示不可编辑的文字)......
GridView gv = new GridView();
View = gv;
// First Collumn - Name.
GridViewColumn col = new GridViewColumn();
col.Header = "Property";
col.Width = 100;
col.DisplayMemberBinding = new Binding("Name");
gv.Columns.Add(col);
// 2nd Column - Value.
col = new GridViewColumn();
col.Header = "Value";
col.Width = 100;
col.DisplayMemberBinding = new Binding("DefaultValue");
FrameworkElementFactory txt = new FrameworkElementFactory(typeof(TextBox));
txt.SetBinding(TextBox.TextProperty, new Binding()); // sets binding
// add textbox template
col.CellTemplate = new DataTemplate(typeof(string));
col.CellTemplate.VisualTree = txt;
gv.Columns.Add(col);
答案 0 :(得分:2)
+1关于使用XAML的评论,但这不能回答你的问题。
我怀疑TextBoxes是只读的原因是因为你直接绑定到字符串。如果WPF允许你编辑它,它会在哪里存储字符串?如您所知,.NET中的字符串是不可变的。
试试这个:
class StringContainer
{
public string SomeValue { get; set; }
}
现在将它连接起来:
FrameworkElementFactory txt = new FrameworkElementFactory(typeof(TextBox));
txt.SetBinding(TextBox.TextProperty, new Binding("SomeValue")); // sets binding
// add textbox template
col.CellTemplate = new DataTemplate(typeof(StringContainer));
绑定数据时,请记住在StringContainer
个对象中包装可编辑的字符串。
myDataRow.DefaultValue = new StringContainer("Some string");