wpf - 以编程方式选择并突出显示数据网格MVVM

标签 wpf mvvm datagrid highlight selecteditem

尝试以编程方式在Item中选择一些DataGrid时遇到麻烦。不使用MVVM模式就可以了。看一下XAML:

    <DataGrid 
        Name="_dataGrid"
        AutoGenerateColumns="False"
        SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Name}"/>
            <DataGridTextColumn Binding="{Binding SecondName}"/>
        </DataGrid.Columns>
    </DataGrid>

后面的代码:
    public class GridItem
    {
        public String Name { get; set; }
        public String SecondName { get; set; }
    }

    public partial class Window1 : Window
    {
        public event PropertyChangedEventHandler PropertyChanged;
        protected void RaisePropertyChanged(String propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }

        private GridItem _selectedItem;
        public GridItem SelectedItem
        {
            get { return _selectedItem; }
            set
            {
                _selectedItem = value;
                RaisePropertyChanged("SelectedItem");
            }
        }

        public Window1()
        {
            InitializeComponent();
            DataContext = this;

            _dataGrid.Loaded += DataGridLoaded;
            Init1();
        }

        void DataGridLoaded(object sender, RoutedEventArgs e)
        {
            Int32 rowIndex = 2;
            var selItem = _dataGrid.Items[rowIndex];

            SelectedItem = (GridItem)selItem;     <-------- Bad
            //_dataGrid.SelectedItem = selItem;   <-------- Good
        }

        private void Init1()
        {
            var source = new List<GridItem>();
            source.Add(new GridItem
            {
                Name = "pavlik",
                SecondName = "bobr"
            });
            source.Add(new GridItem
            {
                Name = "alex",
                SecondName = "ugr"
            });
            source.Add(new GridItem
            {
                Name = "den",
                SecondName = "ivanov"
            });
            source.Add(new GridItem
            {
                Name = "dima",
                SecondName = "klim"
            });
            _dataGrid.ItemsSource = source;
        }
    }

所以,当我像这样选择Item
_dataGrid.SelectedItem = selItem; // Good
Item已选择并正确突出显示。

但是,当我尝试通过Item属性选择并突出显示Model时,Item未突出显示!
SelectedItem = (GridItem)selItem; // Bad

是什么原因?任何的想法?

最佳答案

您需要从INotifyPropertyChanged继承窗口或任何 View 模型类,否则它不会通知客户端属性值已更改。

对于你的情况可能就像

public partial class Window1 : INotifyPropertyChanged
{
    // Class code goes here;
    public event PropertyChangedEventHandler PropertyChanged;
    protected void RaisePropertyChanged(String propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

关于wpf - 以编程方式选择并突出显示数据网格MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23358695/

相关文章:

c# - GotFocus事件触发时如何使用MVVMPattern验证输入字段?

c# - 如何创建引用多个控件的WPF行为?

wpf - 折叠除第一个组之外的所有组

c# - 在 MVVM 中给出一些命令来查看

wpf - MahApps DataGrid 列标题外壳

c# - 获取 Datagrid WPF 列上的选定项目并通过 Linq 查找它

wpf - 淡出从项目控制中删除项目

wpf - WPF RichTextBox 中的段落格式?

c# - 如何在不使用 MVVM 的情况下绑定(bind) DependencyProperty

c# - 在 MVVM 中绑定(bind) ListPicker (Selection_Changed)