双击如何将可观察的集合数据网格与文本框绑定?

时间:2019-03-07 11:00:16

标签: c# wpf datagrid

我正在使用MVVM学习WPF。

我有一个包含一些信息的DataGrid。数据网格的来源是一个可观察的集合。 当我双击数据网格中的特定行时,我需要将信息加载到文本框中。我希望将行的特定单元格加载到文本框中。

我遵循的步骤

  1. 声明了一个数据网格

Window.xaml:

     <DataGrid x:Name="datagrid1" SelectedItem="{Binding GetRowData}" AutoGenerateColumns="True" CanUserAddRows="False"
Height="90" Width="358" Margin="-210,-200,-90,-187" HorizontalAlignment="Left">
                        <DataGrid.Style>
                        <Style TargetType="{x:Type DataGrid}">
                        <Setter Property="ItemsSource" Value="{Binding modelclasswithcombobox}"/>
                        <Style.Triggers>
                        <DataTrigger Binding="{Binding isfront}" Value="True">
                        <Setter Property="ItemsSource" Value="{Binding ModelClasstabwithdate}"/>
                       </DataTrigger>
                     </Style.Triggers>
                   </Style>
           </DataGrid.Style>
    </DataGrid>
  1. 声明了一个文本框

在文本框中,我将选定的datagrid项绑定为路径。

 <TextBox x:Name="txtboxAuditId" IsEnabled="{Binding IsEnabled}" 
  Width="108" Height="19.277" HorizontalAlignment="Left" 
 Margin="-20,14,708.962,0" VerticalAlignment="Top" Text="{Binding 
 ElementName=datagrid1, Path =  GetRowData, Mode=TwoWay, 
 ValidatesOnDataErrors=True,NotifyOnValidationError=True, 
 UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True}" />
  1. 在视图模型中,使用INotifyPropertyChanged声明了一个属性以获取更改的数据。

    private string _gettherow;
    public string GetRowData
    {
        get { return this._gettherow; }
        set
        {
            if (this._gettherow != value)
            {
                this._gettherow = value;
                OnPropertyChanged("GetRowData");
            }
         }
    }
    

现在的问题是,当我单击datagrid行时如何提供命令,以便填充我的文本框。我通常将Icommand界面用于按钮单击事件,无论我是否还需要应用相同的命令或其他任何操作。

2 个答案:

答案 0 :(得分:0)

在这种情况下,您的GetRowData不应为字符串。它应该是您的自定义类型,例如ObservableCollection。例如,如果下面是绑定到DataGrid的ObservableCollection,

ObservableCollection<ModelClass> collection = new ObservableCollection<ModelClass>();

然后您的GetRowData应该是这样的。

private ModelClass _gettherow;
public ModelClass GetRowData
{
    get { return this._gettherow; }
    set
    {
        if (this._gettherow != value)
        {
            this._gettherow = value;
            OnPropertyChanged("GetRowData");
        }
     }
}

然后将其像这样(CustomType.PropertyName)绑定到TextBox

<TextBox Text="{Binding GetRowData.Name}"/>

答案 1 :(得分:0)

因此,如果我理解这个问题,则希望在用户输入您的TextBox DataGridCell后更新一个独立的Row

如果是这种情况,那么您想使用DataTriggers

影响

        <TextBox>
            <TextBox.Style>
                <Style TargetType="TextBox">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=yourDataGrid, Path=BeginningEdit}" Value="True">
                            <Setter Property="Text" Value="{Binding YourTextProperty}" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBox.Style>
        </TextBox>

您可以在这里https://www.wpf-tutorial.com/styles/trigger-datatrigger-event-trigger/

了解更多信息