2013-12-18 87 views
0

努力学习MVVM在WPF这里...Selected属性MVVM

我使用EF4.0并已成功绑定一个DataGrid到这是从一个简单的LINQ查询填充的ObservableCollection

我现在想要将文本框绑定到网格视图中的选定属性。例如,我想让我的txtName Textbox反映DataGrid中选定的Name属性。我已经下降到一个列在我DataGrid把事情简单化这是我到目前为止有:

XAML:

<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> 

视图模型:

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]; 
    } 

问题是我的SelectedTransaction属性从未设置。 getter返回null,然后set方法永远不会运行,因此我的textbox值从不设置。我有一年的编程经验,所以这对我来说有点“深入人心”。由于

+0

你的TextBox在哪里? – Nitin

+0

你有什么问题?目前尚不清楚。 –

+0

哎呦,编辑XAML的问题。 – Hardgraf

回答

1

你应该设置结合ModeTwoWayDataGrid所以的SelectedItem将被更新:

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

..和改变TextBox结合:

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

非常感谢!慢慢学习... – Hardgraf

0

你需要添加一个文本框,并绑定选择的item.name其text属性 例如:

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

     </TextBox> 
<TextBox />