반응형
WPF DataGrid에 버튼 추가
작성하려고 합니다.DataGrid
각 행의 첫 번째 셀에 버튼이 있는 WPF 제어.이 버튼을 클릭하면RowDetailsTemplate
서브로우를 선택합니다.
버튼을 추가하려면 어떻게 해야 하나요?RowDetailsTemplate
?
첫 번째 작성은DataGridTemplateColumn
버튼을 포함합니다.
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="ShowHideDetails">Details</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
이 버튼을 클릭하면 다음을 업데이트합니다.DataGridRow
의DetailsVisibility
:
void ShowHideDetails(object sender, RoutedEventArgs e)
{
for (var vis = sender as Visual; vis != null; vis = VisualTreeHelper.GetParent(vis) as Visual)
if (vis is DataGridRow)
{
var row = (DataGridRow)vis;
row.DetailsVisibility =
row.DetailsVisibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
break;
}
}
이것 좀 봐.
XAML:
<DataGrid Name="DataGrid1">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="ChangeText">Show/Hide</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
방법:
private void ChangeText(object sender, RoutedEventArgs e)
{
DemoModel model = (sender as Button).DataContext as DemoModel;
model.DynamicText = (new Random().Next(0, 100).ToString());
}
클래스:
class DemoModel : INotifyPropertyChanged
{
protected String _text;
public String Text
{
get { return _text; }
set { _text = value; RaisePropertyChanged("Text"); }
}
protected String _dynamicText;
public String DynamicText
{
get { return _dynamicText; }
set { _dynamicText = value; RaisePropertyChanged("DynamicText"); }
}
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(String propertyName)
{
PropertyChangedEventHandler temp = PropertyChanged;
if (temp != null)
{
temp(this, new PropertyChangedEventArgs(propertyName));
}
}
}
초기화 코드:
ObservableCollection<DemoModel> models = new ObservableCollection<DemoModel>();
models.Add(new DemoModel() { Text = "Some Text #1." });
models.Add(new DemoModel() { Text = "Some Text #2." });
models.Add(new DemoModel() { Text = "Some Text #3." });
models.Add(new DemoModel() { Text = "Some Text #4." });
models.Add(new DemoModel() { Text = "Some Text #5." });
DataGrid1.ItemsSource = models;
XAML
<DataGrid x:Name="dgv_Students" AutoGenerateColumns="False"
ItemsSource="{Binding People}" Margin="10,20,10,0"
Style="{StaticResource AzureDataGrid}" FontFamily="B Yekan"
Background="#FFB9D1BA">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="RowButton_Click">Text</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
코드 이면
private IEnumerable<DataGridRow> GetDataGridRowsForButtons(DataGrid grid)
{
//IQueryable
if (!(grid.ItemsSource is IEnumerable itemsSource))
yield return null;
foreach (var item in itemsSource)
{
var row = grid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
if (null != row & row.IsSelected)
yield return row;
}
}
private void RowButton_Click(object sender, RoutedEventArgs e)
{
for (var vis = sender as Visual; vis != null; vis = VisualTreeHelper.GetParent(vis) as Visual)
if (vis is DataGridRow)
{
// var row = (DataGrid)vis;
var rows = GetDataGridRowsForButtons(dgv_Students);
string id;
foreach (DataGridRow dr in rows)
{
id = (dr.Item as tbl_student).Identification_code;
MessageBox.Show(id);
break;
}
break;
}
}
단추를 클릭하면 해당 행의 ID가 반환되고 단추 이름으로 사용할 수 있습니다.
를 사용하는 경우Command
대신 아래 예를 지하로 사용할 수 있습니다.
<DataGridTemplateColumn
Header="Action"
>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button
VerticalAlignment="Top"
Command="{Binding DataContext.MyCommand, RelativeSource={RelativeSource FindAncestor,
AncestorLevel=1, AncestorType={x:Type UserControl}}}"
CommandParameter="{Binding .}"
Content="Delete">
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
다음 중 하나를 선택해주세요.AncestorTyp
상위 뷰와 일치합니다.ViewModel
바인드되어 있습니다.
언급URL : https://stackoverflow.com/questions/3046003/adding-a-button-to-a-wpf-datagrid
반응형
'programing' 카테고리의 다른 글
WPF 라벨의 줄바꿈? (0) | 2023.04.13 |
---|---|
UIScroll View 스크롤 가능 콘텐츠 크기 모호성 (0) | 2023.04.13 |
NSOperation vs Grand Central Dispatch (0) | 2023.04.13 |
매크로를 사용하여 Windows 사용자 이름을 Excel 스프레드 시트에 표시하려면 어떻게 해야 합니까? (0) | 2023.04.13 |
Excel 탭 시트 이름과Visual Basic 시트 이름 (0) | 2023.04.13 |