如果在视图中更改集合的值,如何通知ViewModel

时间:2014-10-26 10:33:54

标签: c# mvvm

我的xaml(View)中有ListView,其itemsSource绑定到Observable集合。

MyView的:

        <ListView x:Name="TestVariables" 
             ItemsSource="{Binding TestVariables}"
             Grid.Row="1"
             Grid.Column="1"
             Grid.ColumnSpan="3">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Background="White" Width="350">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>

                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="175"/>
                        <ColumnDefinition Width="175"/>
                    </Grid.ColumnDefinitions>

                    <TextBlock Grid.Row="0"
                               Grid.Column="0"
                               Text="{Binding Key}"/>

                    <TextBox Grid.Row="0"
                               Grid.Column="1"
                               Text="{Binding Value}"/>

                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

问题:因此,当我运行我的应用程序并更改我的TextBox值时,如何在我的视图模型中获得仅具有这些更改的新集合?我想在我的代码中的某处使用该新集合。换句话说,我如何通知我的viewmodel这些更改?

例如,如果我运行这个,我会得到:23岁,                                         性女,                                         身高2

如果我将文本框更改为:24岁,                                         性别男,                                         身高2

我想在我的viewModel中构建一个新的集合:24岁,                                                      性别男性

这是我的ViewModel:

公共类MainViewModel:ViewModelBase     {    public ObservableCollection TestVariables {get;组; }

    public MainViewModel()
    {
        TestVariables= new ObservableCollection<TestVariable>
        {
            new TestVariable() {Key = "age", Value = 23},
            new TestVariable() {Key = "sex", Value = "female"},
            new TestVariable() {Key = "height", Value = 2}
        };
    }
}

TestVarible类:

public class TestVariable
{
    public string Key { get; set; }
    public object Value { get; set;}

}

}

由于

1 个答案:

答案 0 :(得分:1)

您也应该通知TestVariables属性的更改。然后在UI上将绑定模式设置为TwoWay绑定。

private ObservableCollection<TestVariable> testVariables;
public ObservableCollection<TestVariable> TestVariables 
{ 
   get{return testVariables;}
   set
   {
     if(testVariables != value)
       {
         testVariables = value;
         OnPropertyChanged("TestVariables");
       }
   }
}