0

WPFToolkit:DataGridでデータバインディングを使用してアプリケーションを作成します。アプリケーションを実行すると、次のようなエラーが発生します。

System.Windows.Dataエラー:40:BindingExpressionパスエラー:'ProcHandle'プロパティが'オブジェクト''' ProcInfo'(HashCode = 61374531)'に見つかりません。BindingExpression:Path = ProcHandle; DataItem ='ProcInfo'(HashCode = 61374531); ターゲット要素は'TextBlock'(Name ='');です。ターゲットプロパティは「テキスト」(タイプ「文字列」)です

MainWindow.xamlの場合:

<toolkit:DataGrid x:Name="DG1" ItemsSource="{Binding}" AutoGenerateColumns="False" Margin="0,47,0,0">
            <toolkit:DataGrid.Columns>
                <toolkit:DataGridTextColumn Header="Time/sec" Binding="{Binding KillTime}"/>
                <toolkit:DataGridTextColumn Header="Handle" Binding="{Binding ProcHandle}"/>
                <toolkit:DataGridTextColumn Header="Start Time" Binding="{Binding StartTime}"/>
                <toolkit:DataGridTextColumn Header="Status" Binding="{Binding ProcStatus}"/>
                <toolkit:DataGridTextColumn Header="Priority" Binding="{Binding ProcPriority}"/>
                <toolkit:DataGridTextColumn Header="End Time" Binding="{Binding EndTime}"/>
            </toolkit:DataGrid.Columns>
        </toolkit:DataGrid>

MainWindow.xaml.cs内

public partial class MainWindow : Window
    {
        private Process _firstProc;

        private DispatcherTimer _timerFirstProc;

        ProcessCollectionClass _procCollection = new ProcessCollectionClass();

        private int _firstProcTime;

public MainWindow()
        {
            InitializeComponent();
            DG1.DataContext = _procCollection.ProcCollection;
        }

        internal class ProcessCollectionClass : INotifyPropertyChanged
        {
            private ObservableCollection<ProcInfo> _procCollection = new ObservableCollection<ProcInfo>();

            public event PropertyChangedEventHandler PropertyChanged;

            public ObservableCollection<ProcInfo> ProcCollection
            {
                get { return _procCollection; }
                set
                {
                    _procCollection = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("ProcCollection"));
                    }
                }
            }
        }

        public class ProcInfo
        {
            public ProcInfo(string killTime, string procHandle, string startTime,
                            string procStatus, string procPriority)
            {
                KillTime = killTime;
                ProcHandle = procHandle;
                StartTime = startTime;
                ProcStatus = procStatus;
                ProcPriority = procPriority;
            }

            private string KillTime { get; set; }
            private string ProcHandle { get; set; }
            private string StartTime { get; set; }
            private string ProcStatus { get; set; }
            private string ProcPriority { get; set; }
        }

private void FirstProc_ButClick(object sender, RoutedEventArgs e)
        {

            _firstProcTime = Int32.Parse(FirstProcTime.Text);
            _firstProc = new Process();
            _firstProc.StartInfo.FileName = @"C:\Windows\System32\cmd.exe";
            _firstProc.StartInfo.UseShellExecute = true;
            _firstProc.Start();
            _firstProc.PriorityClass = ProcessPriorityClass.High;

            _timerFirstProc = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(1) };
            _timerFirstProc.Start();
            _timerFirstProc.Tick += _timerFirstProc_Tick;
}
 void _timerFirstProc_Tick(object sender, EventArgs e)
        {
            --_firstProcTime;

            _firstProc.Refresh();
            _procCollection.ProcCollection.Add(new ProcInfo(
                                                   _firstProcTime.ToString(),
                                                   _firstProc.Handle.ToString(),
                                                   _firstProc.StartTime.ToString(),
                                                   _firstProc.Responding ? "Running" : "Not Responding",
                                                   _firstProc.PriorityClass.ToString()));

            if (_firstProcTime == 0)
            {
                _firstProc.Kill();
                _timerFirstProc.Stop();
            }
}

結局、DataGridには空白行しか表示されません。何が悪いの!?そして私の悪い英語でごめんなさい

4

1 に答える 1

5

ProcInfoクラス内のすべてのプロパティはプライベートです。彼らはする必要がありますpublic。または、少なくともパブリックゲッターがあります。

于 2013-01-18T21:26:26.707 に答える