我正在使用MVVM学习WPF。
我有一个包含一些信息的DataGrid。数据网格的来源是一个可观察的集合。 当我双击数据网格中的特定行时,我需要将信息加载到文本框中。我希望将行的特定单元格加载到文本框中。
我遵循的步骤
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>
在文本框中,我将选定的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}" />
在视图模型中,使用INotifyPropertyChanged声明了一个属性以获取更改的数据。
private string _gettherow;
public string GetRowData
{
get { return this._gettherow; }
set
{
if (this._gettherow != value)
{
this._gettherow = value;
OnPropertyChanged("GetRowData");
}
}
}
现在的问题是,当我单击datagrid行时如何提供命令,以便填充我的文本框。我通常将Icommand界面用于按钮单击事件,无论我是否还需要应用相同的命令或其他任何操作。
答案 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
DataGrid
或Cell
后更新一个独立的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/
了解更多信息