示例下载:
http://pan.baidu.com/share/link?shareid=160692&uk=3224032458
如XAML<Window x:Class="_2_2_1_获取进程信息.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="150"></RowDefinition>
        </Grid.RowDefinitions>
        <DataGrid Grid.Row="0" ItemsSource="{Binding ListProcess,Mode=OneWay}"
                  SelectionMode="Single"
                  RowBackground="LightBlue" 
                  AlternatingRowBackground="Aqua"
                  AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="进程ID" Binding="{Binding Id}"></DataGridTextColumn>
                <DataGridTextColumn Header="进程名称" Binding="{Binding ProcessName}"></DataGridTextColumn>
                <DataGridTextColumn Header="物理内存" Binding="{Binding WorkingSet64}"></DataGridTextColumn>
                <DataGridTextColumn Header="启动时间" Binding="{Binding StartTime}"></DataGridTextColumn>
                <DataGridTextColumn Header="文件名" Binding="{Binding MainModule.FileName}"></DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
        <DockPanel LastChildFill="True" Grid.Row="1">
            <TextBlock DockPanel.Dock="Top">详细信息</TextBlock>
            <StackPanel DockPanel.Dock="Bottom">
                <Button Content="刷新" Width="100"></Button>
            </StackPanel>
            <TextBox></TextBox>
        </DockPanel>
    </Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows;namespace _2_2_1_获取进程信息.ViewModel
{
    public class MainWindowViewModel : Z.Core.WPF.NotificationObject
    {
        #region 默认构造函数
        public Window WIN;
        public MainWindowViewModel(Window win)
        {
            this.WIN = win;
            Init();
        }        void Init()
        {
            this.ListProcess = Process.GetProcesses();
        }
        #endregion        #region 界面属性
        private Process[] m_ListProcess;
        /// <summary>
        /// 进程列表
        /// </summary>
        public Process[] ListProcess
        {
            get { return m_ListProcess; }
            set
            {
                m_ListProcess = value;
                this.RaisePropertyChanged("ListProcess");
            }
        }        private Process m_ActiveProcess;
        /// <summary>
        /// 选中进程
        /// </summary>
        public Process ActiveProcess
        {
            get { return m_ActiveProcess; }
            set
            {
                m_ActiveProcess = value;
                this.RaisePropertyChanged("ActiveProcess");
            }
        }        
        #endregion
    }
}出错:
无法对“System.Diagnostics.Process”类型的只读属性“StartTime”进行 TwoWay 或 OneWayToSource 绑定
但我已经是用Mode=OneWay了为什么还会出现TwoWay这种错误呢?
1:我想是不是因为Mode=OneWay只是针对ListProcess,但点击的列的对像为Process所以这里他默认是TwoWay?如果是要怎解决?
2:在DataGrid点中一个格的时候,格会有边框,但我现在想点的时候是选对一行,不要对某个单元格进行焦点谢谢

解决方案 »

  1.   

    我设置的是:ItemsSource="{Binding ListProcess,Mode=OneWay}"
    不是ItemsSource="{Binding ListProcess,Mode=OneWayToSource}"
    谢谢
      

  2.   

    1. 感觉 DataGridTextColumn 默认是 Twoway (为了支持编辑?)
       可以在 DataGrid 上加上 IsReadOnly="True" 2. 自定义style:
    <DataGrid.Style>
                    <Style TargetType="DataGrid">
                        <Setter Property="CellStyle">
                            <Setter.Value>
                                <Style TargetType="DataGridCell">
                                    <Setter Property="BorderThickness" Value="0" />
                                </Style>
                            </Setter.Value>
                        </Setter>                   
                    </Style>
                </DataGrid.Style>
      

  3.   

    1. 没有看到你说的错误,你的程序在我这里能正常运行2. 在DataGrid中加上下面这段:    <DataGrid.CellStyle>
            <Style TargetType="DataGridCell">
                <Setter Property="BorderThickness" Value="0"/>
            </Style>
        </DataGrid.CellStyle>
      

  4.   

    恩恩,我没有注意标题上的双击两个字。
    默认绑定确实是TwoWay,确实应该设成 readonly