我在WPFToolkit:DataGrid中使用数据绑定创建了一些应用程序。 当我运行应用程序时,我发现了这个错误,例如:
System.Windows.Data错误:40:BindingExpression路径错误: 在'对象'''ProcInfo'上找不到'ProcHandle'属性 (的HashCode = 61374531)”。 BindingExpression:路径= ProcHandle; DataItem ='ProcInfo'(HashCode = 61374531);目标元素是'TextBlock' (名称= ''); target属性是'Text'(类型'String')
在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中只看到空白行。我究竟做错了什么!? 抱歉我的英语不好
答案 0 :(得分:5)
ProcInfo
课程中的所有属性都是私有的。它们应该是public
。或者至少有一个公共吸气者。