在这里努力学习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方法永远不会运行,因此永远不会设置我的文本框值。我有一年的编程经验,所以这对我来说有点'深入'。感谢
答案 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 />