Я хотел бы заново создать следующий XAML в C # - PullRequest
0 голосов
/ 26 октября 2011

Учитывая следующий код xaml, я хотел бы создать этот код xaml для части GridView в C #, чтобы присоединить источник данных к ListView ItemItemsSource EditBox - это просто текстовое поле класса

 <ListView.View>
  <!-- Here is the part i'd like to do with C# -->
    <GridView AllowsColumnReorder="true"
              ColumnHeaderToolTip="Employee Information">
      <GridViewColumn DisplayMemberBinding=
                            "{Binding Path=FirstName}" 
                      Header="First Name" Width="100"/>

                <GridViewColumn Header="Last Name" Width="100" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <l:EditBox Height="25" Value="{Binding Path=LastName}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="ID" Width="75" >
        <GridViewColumn.CellTemplate>
          <DataTemplate>
            <l:EditBox Height="25" Value="{Binding Path=EmployeeNumber}" />
          </DataTemplate>
        </GridViewColumn.CellTemplate>
      </GridViewColumn>
     </GridView>
  </ListView.View>
</ListView>

Я сделал нечто подобное в другом проекте.

        ListView ctrl = (ListView)GetCtrl((string)strctrl);//Rebuild the gridview
        ctrl.View = null;
        GridView grid = new System.Windows.Controls.GridView();

        int c = 0;
        foreach (DataColumn lv_col in data.Table.Columns)
        {
            //Skip columns ending with "_ID"
            int ilen = lv_col.ColumnName.Length;
            if (lv_col.ColumnName.Substring(ilen - 3) != "_ID" && lv_col.ColumnName != "Deleted")
            {
                GridViewColumn col = new System.Windows.Controls.GridViewColumn();
                if (labels != null && labels.Contains(lv_col.ColumnName))
                    lv_col.Caption = labels[lv_col.ColumnName].ToString();
                col.Header = lv_col.Caption;
                Binding colbind = new Binding("[" + c.ToString() + "]");

                if (lv_col.DataType.GetType() == typeof(System.DateTime))
                {
                    colbind.StringFormat = date_format;
                    if (Global.Lng == "F") colbind.ConverterCulture = System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR");  // #Even on a engrish system, this should display french dates
                }
                else if (lv_col.DataType.GetType() == typeof(System.Double))
                    colbind.StringFormat = "0";

                col.DisplayMemberBinding = colbind;
                grid.Columns.Add(col);
            }
            c += 1;
        }

        //Restore column widths
        foreach (int i in Enumerable.Range(0, col_widths.Count))
            if (i < grid.Columns.Count) grid.Columns[i].Width = col_widths[i];

        ctrl.View = grid;
        ctrl.ItemsSource = data;

        ctrl.UpdateLayout();//This will force the listview to finish displaying.

1 Ответ

0 голосов
/ 26 октября 2011

Я не уверен, с какой частью у вас проблемы, но я подозреваю, что это с DataTemplates.Я не знаю, что у вас за EditBox, поэтому я просто использовал TextBox.

        var gridView = new GridView { AllowsColumnReorder = true, ColumnHeaderToolTip = "Employee Information" };

        // column 1
        var col1 = new GridViewColumn { DisplayMemberBinding = new Binding("FirstName"), Header="First Name", Width=100 };
        gridView.Columns.Add(col1);

        // column 2 
        var col2 = new GridViewColumn { Header="Last Name", Width=100 };
        var fef2 = new FrameworkElementFactory(typeof(TextBox));
        fef2.SetValue(TextBox.HeightProperty, 25d);
        fef2.SetBinding(TextBox.TextProperty, new Binding("LastName"));
        col2.CellTemplate = new DataTemplate { VisualTree = fef2 };
        gridView.Columns.Add(col2);

        // column 3
        var col3 = new GridViewColumn { Header = "ID", Width = 75 };
        var fef3 = new FrameworkElementFactory(typeof(TextBox));
        fef3.SetValue(TextBox.HeightProperty, 25d);
        fef3.SetBinding(TextBox.TextProperty, new Binding("EmployeeNumber"));
        col3.CellTemplate = new DataTemplate { VisualTree = fef3 };
        gridView.Columns.Add(col3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...