【问题标题】:mvvm datagrid cannot update model from viewmvvm datagrid 无法从视图更新模型
【发布时间】:2014-08-04 18:31:56
【问题描述】:

我是 WPF 新手,我正在通过 MVVMLight 使用 MVVM,我有一个绑定到视图模型的 ObservableCollection 的数据网格,当我手动更新 modelView 时,视图会按预期更改, 问题是当我改变视图时,viewModel的值没有改变

这是模型:

public class Student
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

这是视图模型:

public class StudentViewModel : ViewModelBase
{
    private Student _student;

    public StudentViewModel(Student student)
    {
        _student = student;
    }

    public string FirstName
    {
        get { return _student.FirstName; }
        set
        {
            if(_student.FirstName==value)return;
            _student.FirstName = value;
            RaisePropertyChanged("FirstName");
        }
    }

    public string LastName
    {
        get { return _student.LastName; }
        set
        {
            if(_student.LastName==value)return;
            _student.LastName = value;
            RaisePropertyChanged("LastName");
        }
    }
}

这是 Test.xaml:

<DataGrid Name="DgrdColumns" Grid.Row="1" Grid.Column="0" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="FirstName">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding FirstName, Mode=TwoWay}"></TextBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTemplateColumn Header="LastName" Width="150">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding LastName, Mode=TwoWay}"></TextBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

这是绑定数据代码:

void BindData()
    {
        var students = new List<Student>()
        {
            new Student()
            {
                FirstName = "aa",
                LastName = "AA"
            },
            new Student()
            {
                FirstName = "bb",
                LastName = "BB"
            }
        };

        var viewModels=new ObservableCollection<StudentViewModel>(students.Select(x=>new StudentViewModel(x)));
        DgrdColumns.ItemsSource = viewModels;
    }

【问题讨论】:

  • "that when I change view" 是什么意思?
  • 表示我在窗口中编辑学生

标签: mvvm datagrid


【解决方案1】:

请尝试在绑定中设置UpdateSourceTrigger

<TextBox Text="{Binding FirstName, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" />

如果它仍然不起作用,请告诉我。

【讨论】:

  • 它工作!被这个问题困扰了2天,非常感谢!
猜你喜欢
  • 2019-01-19
  • 2018-06-30
  • 2013-02-10
  • 1970-01-01
  • 2020-01-17
  • 2012-01-19
  • 2017-05-15
  • 2016-11-25
  • 1970-01-01
相关资源
最近更新 更多