Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight sdk和子输入中的DataGrid控件问题,C#_C#_Wpf_Silverlight_Xaml_Datagrid - Fatal编程技术网

Silverlight sdk和子输入中的DataGrid控件问题,C#

Silverlight sdk和子输入中的DataGrid控件问题,C#,c#,wpf,silverlight,xaml,datagrid,C#,Wpf,Silverlight,Xaml,Datagrid,我正在使用DataGrid控件编写Silverlight 5 web应用程序。我确实有一个有趣的问题 我为每一行使用模板列。每行表示一个可观察集合中的一个数据项 每行包含一个复选框、一个文本块和一个文本框 我的错误发生在一个silverlight无法在屏幕上绘制的行数过多的环境中,因此启用了垂直scollbar 当用户将信息输入到多个文本框和/或多个复选框中时,将选中向下滚动的随机框,并使用先前填充的文本框中的类似/部分输入填充随机文本框 当用户上下滚动时,会随机填充不同的行。我用绑定输入和未绑

我正在使用DataGrid控件编写Silverlight 5 web应用程序。我确实有一个有趣的问题

我为每一行使用模板列。每行表示一个可观察集合中的一个数据项

每行包含一个复选框、一个文本块和一个文本框

我的错误发生在一个silverlight无法在屏幕上绘制的行数过多的环境中,因此启用了垂直scollbar

当用户将信息输入到多个文本框和/或多个复选框中时,将选中向下滚动的随机框,并使用先前填充的文本框中的类似/部分输入填充随机文本框

当用户上下滚动时,会随机填充不同的行。我用绑定输入和未绑定输入尝试过,结果是一样的

我已经模拟了一个例子来说明这个问题

这是MainPage.xaml的xaml

<UserControl x:Class="DataGrid_bug_repro.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"
mc:Ignorable="d"
d:DesignHeight="600" d:DesignWidth="800">

<Grid x:Name="LayoutRoot" Background="White">
    <StackPanel>
        <TextBlock Margin="60 0 0 0">Bound to Data Items</TextBlock>
    <sdk:DataGrid Name="dgBound" Height="280" Width="680" AutoGenerateColumns="False" FontSize="12" >
        <sdk:DataGrid.Columns>
            <sdk:DataGridTemplateColumn Header="Select" >
                <sdk:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <CheckBox Width="40" Tag="{Binding ID}"  IsChecked="{Binding Selected}" />
                        </StackPanel>
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellTemplate>
            </sdk:DataGridTemplateColumn>
            <sdk:DataGridTemplateColumn Header="name" >
                <sdk:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <Grid>
                                <TextBlock TextWrapping="Wrap" Text="{Binding Name}" TextOptions.TextFormattingMode="Ideal" />
                            </Grid>
                        </StackPanel>
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellTemplate>
            </sdk:DataGridTemplateColumn>
            <sdk:DataGridTemplateColumn Header="txt" >
                <sdk:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <Grid>
                                <TextBox Text="{Binding txt}" />
                            </Grid>
                        </StackPanel>
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellTemplate>
            </sdk:DataGridTemplateColumn>
        </sdk:DataGrid.Columns>
    </sdk:DataGrid>
        <TextBlock Margin="60 0 0 0">Not Bound to Data Items</TextBlock>
    <sdk:DataGrid Name="dgNotBound" Height="280" Width="680" AutoGenerateColumns="False" FontSize="12" >
        <sdk:DataGrid.Columns>
            <sdk:DataGridTemplateColumn Header="Select" >
                <sdk:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <CheckBox Width="40" Tag="{Binding ID}"  />
                        </StackPanel>
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellTemplate>
            </sdk:DataGridTemplateColumn>
            <sdk:DataGridTemplateColumn Header="name" >
                <sdk:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <Grid>
                                <TextBlock TextWrapping="Wrap" Text="{Binding Name}" TextOptions.TextFormattingMode="Ideal" />
                            </Grid>
                        </StackPanel>
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellTemplate>
            </sdk:DataGridTemplateColumn>
            <sdk:DataGridTemplateColumn Header="txt" >
                <sdk:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <Grid>
                                <TextBox Text="" />
                            </Grid>
                        </StackPanel>
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellTemplate>
            </sdk:DataGridTemplateColumn>
        </sdk:DataGrid.Columns>
    </sdk:DataGrid>
    </StackPanel>
</Grid>
</UserControl>

绑定到数据项
未绑定到数据项
以下是MainPage.xaml.cs文件的C#代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.ComponentModel;
using System.Collections.ObjectModel;

namespace DataGrid_bug_repro
{
public class ITEM : INotifyPropertyChanged
{
    private string _ID = string.Empty;
    private bool _Selected = false;
    private string _Name = string.Empty;
    private string _txt = string.Empty;

    public string ID
    {
        get{return _ID;}
        set { _ID = value; onPropertyChanged(this, "ID"); }
    }

    public string Name
    {
        get { return _Name; }
        set { _Name = value; onPropertyChanged(this, "Name"); }
    }

    public string txt
    {
        get { return _txt; }
        set { _txt = value; onPropertyChanged(this, "txt"); }
    }

    public bool Selected
    {
        get { return _Selected; }
        set { _Selected = value; onPropertyChanged(this, "Selected"); }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void onPropertyChanged(object sender, string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            PropertyChanged(sender, new PropertyChangedEventArgs(propertyName));
        }
    }
  }
  public partial class MainPage : UserControl
  {
    public MainPage()
    {
        ObservableCollection<ITEM> Items = new ObservableCollection<ITEM> { 
                                new ITEM { ID="1", Name="Gomez" },
                                new ITEM { ID="2", Name="Morticia" },
                                new ITEM { ID="3", Name="Pugsly" },
                                new ITEM { ID="4", Name="Wednesday" },
                                new ITEM { ID="5", Name="Pubert" },
                                new ITEM { ID="6", Name="Uncle Fester" },
                                new ITEM { ID="7", Name="Grandmama" },
                                new ITEM { ID="8", Name="Thing" },
                                new ITEM { ID="9", Name="Lurch" },
                                new ITEM { ID="10", Name="Cousin Itt" },
                                new ITEM { ID="11", Name="Cousin Cackle" },
                                new ITEM { ID="12", Name="Kitty Cat" },
                                new ITEM { ID="13", Name="Aristotle" },
                                new ITEM { ID="14", Name="Homer" },
                                new ITEM { ID="15", Name="Tristan" },
                                new ITEM { ID="16", Name="Isolde" },
                                new ITEM { ID="17", Name="Zelda" },
                                new ITEM { ID="18", Name="Cleopatra" },
                                new ITEM { ID="19", Name="Bernice" },
                                new ITEM { ID="20", Name="Ophelia" },
                                new ITEM { ID="21", Name="Melancholia" },
                                new ITEM { ID="22", Name="Hester" },
                                new ITEM { ID="23", Name="Norman Normanmeyers" },
                                new ITEM { ID="24", Name="Normina Normanmeyers" },
                                new ITEM { ID="25", Name="N.J. Normanmeyers" }      };
        InitializeComponent();

        dgBound.ItemsSource = Items;
        dgNotBound.ItemsSource = Items;
    }
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
Net系统;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Documents;
使用System.Windows.Input;
使用System.Windows.Media;
使用System.Windows.Media.Animation;
使用System.Windows.Shapes;
使用系统组件模型;
使用System.Collections.ObjectModel;
命名空间DataGrid\u bug\u repo
{
公共类项目:INotifyPropertyChanged
{
私有字符串_ID=string.Empty;
选择的私有布尔值=false;
私有字符串_Name=string.Empty;
私有字符串_txt=string.Empty;
公共字符串ID
{
获取{return\u ID;}
set{u ID=value;onPropertyChanged(这个“ID”);}
}
公共字符串名
{
获取{return\u Name;}
设置{u Name=value;onPropertyChanged(此“名称”);}
}
公共字符串
{
获取{return\u txt;}
设置{uTXT=value;onPropertyChanged(此为“txt”);}
}
公共图书馆获选
{
获取{return\u Selected;}
设置{u Selected=value;onPropertyChanged(这个“Selected”);}
}
公共事件属性更改事件处理程序属性更改;
私有void onPropertyChanged(对象发送方,字符串propertyName)
{
if(this.PropertyChanged!=null)
{
PropertyChanged(发件人,新PropertyChangedEventArgs(propertyName));
}
}
}
公共部分类主页面:UserControl
{
公共主页()
{
ObservableCollection项=新的ObservableCollection{
新项目{ID=“1”,Name=“Gomez”},
新项目{ID=“2”,Name=“Morticia”},
新项目{ID=“3”,Name=“Pugsly”},
新项目{ID=“4”,Name=“星期三”},
新项目{ID=“5”,Name=“Pubert”},
新项目{ID=“6”,Name=“Fester叔叔”},
新项目{ID=“7”,Name=“Grandmama”},
新项目{ID=“8”,Name=“Thing”},
新项目{ID=“9”,Name=“Lurch”},
新项目{ID=“10”,Name=“counse Itt”},
新项目{ID=“11”,Name=“counse Cackle”},
新项目{ID=“12”,Name=“Kitty Cat”},
新项目{ID=“13”,Name=“亚里士多德”},
新项目{ID=“14”,Name=“Homer”},
新项目{ID=“15”,Name=“Tristan”},
新项目{ID=“16”,Name=“Isolde”},
新项目{ID=“17”,Name=“Zelda”},
新项目{ID=“18”,Name=“克利奥帕特拉”},
新项目{ID=“19”,Name=“Bernice”},
新项目{ID=“20”,Name=“Ophelia”},
新项目{ID=“21”,Name=“忧郁症”},
新项目{ID=“22”,Name=“Hester”},
新项目{ID=“23”,Name=“Norman Normanmeyers”},
新项目{ID=“24”,Name=“Normina Normanmeyers”},
新项目{ID=“25”,Name=“N.J.Normammeyers”};
初始化组件();
dgbund.ItemsSource=项目;
dgNotBound
private void DataGrid_IsKeyboardFocusWithinChanged(object sender,     System.Windows.DependencyPropertyChangedEventArgs e)
{
        (sender as DataGrid).CommitEdit(DataGridEditingUnit.Row, true);
}