新手在C#中使用GridView CellTemplate

时间:2011-04-03 02:34:12

标签: c# wpf gridview

我正在学习如何制作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);

1 个答案:

答案 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");