选定的属性MVVM

时间:2013-12-18 10:55:16

标签: c# wpf xaml mvvm datagrid

在这里努力学习WPF中的MVVM ......

我正在使用EF4.0并设法将DataGrid绑定到ObservableCollection,该LINQ是通过简单的Textbox查询填充的。

我现在想要从网格视图将文本框绑定到选定的属性。例如,我希望我的txtName DataGrid能够反映DataGrid中所选的Name属性。我已经在我的 <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding AssetTransList}" SelectedItem="{Binding SelectedTransaction}" Height="177" Name="dataGrid1" Width="869" VerticalAlignment="Bottom"> <DataGrid.Columns> <DataGridTextColumn Header="Block Name" Binding="{Binding Name}"/> </DataGrid.Columns> </DataGrid> <Grid DataContext="SelectedTransaction"> <TextBox Height="23" Name="txtBlockName" Width="120" Margin="61,8,671,55"> <TextBox.Text> <Binding Path="Block_name" UpdateSourceTrigger="Explicit"> </Binding> </TextBox.Text> </TextBox> <Label Content="Block Name" Name="label1" Margin="6,6,771,48" Target="{Binding}" /> </Grid> 中找到了一个单独的列,以简化这些我到目前为止所做的事情:

XAML:

 private tbAssetTransaction _selectedTransaction;
    public tbAssetTransaction SelectedTransaction
    {
        get { return _selectedTransaction; }
        set
        {
            if (_selectedTransaction != value)
            {
                _selectedTransaction = value;
                OnPropertyChanged("SelectedTransaction");
            }
        }
    }

查看型号:

INotifyPropertyChanged

视图模型从基类实现class AssetTransactionViewModel : NotifyPropertyBase { public ObservableCollection<tbAssetTransaction> SelectedAssetTransactions { get; set; } public AssetTransactionViewModel() { GetAssetTransactions(); SelectedAssetTransactions = new ObservableCollection<tbAssetTransaction>(); SelectedTransaction = SelectedAssetTransactions[0]; } 。在我的View Model构造函数中,我不确定如何提取所选数据...

构造函数:

{{1}}

问题是我从未设置过SelectedTransaction属性。 getter返回null,然后set方法永远不会运行,因此永远不会设置我的文本框值。我有一年的编程经验,所以这对我来说有点'深入'。感谢

2 个答案:

答案 0 :(得分:1)

您应该在Mode中将绑定TwoWay设置为DataGrid,以便更新 SelectedItem

SelectedItem="{Binding SelectedTransaction, Mode=TwoWay}"

..并更改TextBox绑定:

Text="{Binding SelectedTransaction.Name}"/>

答案 1 :(得分:0)

您需要添加一个文本框并将所选的item.name绑定到其text属性 例如:

 <TextBox Height="23" Name="txtBlockName" Width="120" Margin="61,8,671,55" Text="{Binding SelectedTransaction.Name}">

        </TextBox>
<TextBox />