【发布时间】:2020-10-14 11:47:20
【问题描述】:
我已经在 DataGridRow(不是 DataGridTextcolumn)中绑定了静态属性。怎么绑定?
我已经在普通网格中手动绑定了一个静态属性。代码如下所示(但现在如何在 DataGridRow-Wise 中绑定属性)。
<Window x:Class="Data_Grid_Row_HeaderBindingTest.GridTest"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Data_Grid_Row_HeaderBindingTest"
mc:Ignorable="d"
Title="GridTest" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="ArgumentName" Grid.Row="0" Grid.Column="0" FontSize="25" TextAlignment="Center" Margin="10"/>
<TextBlock Text="ArgumentValue" Grid.Row="0" Grid.Column="1" FontSize="25" TextAlignment="Center" Margin="10"/>
<TextBlock Text="IA" Grid.Row="1" Grid.Column="0" FontSize="25" TextAlignment="Center" Margin="10"/>
<TextBlock Text="IB" Grid.Row="2" Grid.Column="0" FontSize="25" TextAlignment="Center" Margin="10"/>
<TextBlock Text="IC" Grid.Row="3" Grid.Column="0" FontSize="25" TextAlignment="Center" Margin="10"/>
<TextBlock Text="ID" Grid.Row="4" Grid.Column="0" FontSize="25" TextAlignment="Center" Margin="10"/>
<TextBlock Text="IE" Grid.Row="5" Grid.Column="0" FontSize="25" TextAlignment="Center" Margin="10"/>
<TextBlock Text="IF" Grid.Row="6" Grid.Column="0" FontSize="25" TextAlignment="Center" Margin="10"/>
<TextBlock Text="IG" Grid.Row="7" Grid.Column="0" FontSize="25" TextAlignment="Center" Margin="10"/>
<TextBox Text="{Binding Path=(local:Model.IA),Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" Grid.Column="1" Width="360" Height="40"/>
<TextBox Text="{Binding Path=(local:Model.IB),Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Row="2" Grid.Column="1" Width="360" Height="40"/>
<TextBox Text="{Binding Path=(local:Model.IC),Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Row="3" Grid.Column="1" Width="360" Height="40"/>
<TextBox Text="{Binding Path=(local:Model.ID),Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Row="4" Grid.Column="1" Width="360" Height="40"/>
<TextBox Text="{Binding Path=(local:Model.IE),Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Row="5" Grid.Column="1" Width="360" Height="40"/>
<TextBox Text="{Binding Path=(local:Model.IF),Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Row="6" Grid.Column="1" Width="360" Height="40"/>
<TextBox Text="{Binding Path=(local:Model.IG),Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Row="7" Grid.Column="1" Width="360" Height="40"/>
<!--<DataGrid x:Name="MyGrid" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Argument Name" Binding="{Binding ArgumentName}"></DataGridTextColumn>
<DataGridTextColumn Header="Argument Value" Binding="{Binding Path=(local:Model.IA),Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
></DataGridTextColumn>
</DataGrid.Columns>
--><!--<DataGrid.RowHeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type DataGridRow}},
Path=Item.Row.Header}"/>
</DataTemplate>
</DataGrid.RowHeaderTemplate>--><!--
<DataGrid.RowHeaderStyle>
<Style TargetType="DataGridRowHeader">
<Setter Property="Content" Value="{Binding Path=(local:Model.Name)}"/>
</Style>
</DataGrid.RowHeaderStyle>
</DataGrid>-->
</Grid>
</Window>
模型类
using System;
using System.Collections.Generic;
using System.Text;
namespace Data_Grid_Row_HeaderBindingTest
{
public class Model
{
private static int iA;
private static int iB;
private static int iC;
private static int iD;
private static int iE;
private static int iF;
private static int iG;
private static string name;
public static int IA
{
get
{
return iA;
}
set
{
iA = value;
// Raise a change event
OnFilterStringChanged(EventArgs.Empty);
}
}
public static int IB
{
get
{
return iB;
}
set
{
iB = value;
// Raise a change event
OnFilterStringChanged(EventArgs.Empty);
}
}
public static int IC
{
get
{
return iC;
}
set
{
iC = value;
// Raise a change event
OnFilterStringChanged(EventArgs.Empty);
}
}
public static int ID
{
get
{
return iD;
}
set
{
iD = value;
// Raise a change event
OnFilterStringChanged(EventArgs.Empty);
}
}
public static int IE
{
get
{
return iE;
}
set
{
iE = value;
// Raise a change event
OnFilterStringChanged(EventArgs.Empty);
}
}
public static int IF
{
get
{
return iF;
}
set
{
iF = value;
// Raise a change event
OnFilterStringChanged(EventArgs.Empty);
}
}
public static int IG
{
get
{
return iG;
}
set
{
iG = value;
// Raise a change event
OnFilterStringChanged(EventArgs.Empty);
}
}
public static string Name
{
get
{
return name;
}
set
{
name = value;
// Raise a change event
OnFilterStringChanged(EventArgs.Empty);
}
}
// Declare a static event representing changes to your static property
public static event EventHandler FilterStringChanged;
// Raise the change event through this static method
protected static void OnFilterStringChanged(EventArgs e)
{
EventHandler handler = FilterStringChanged;
if (handler != null)
{
handler(null, e);
}
}
static Model()
{
// Set up an empty event handler
FilterStringChanged += (sender, e) => { return; };
}
}
}
但现在相同的属性绑定到DataGrid。如何绑定?
【问题讨论】:
-
很难理解你想说什么。另外,请不要将属性命名为 IA、IB、IC ...
-
这似乎是一个非常熟悉的问题。转换为行视图模型的列表或 observablecollection。那应该有 propertyname 和 propertyvalue 属性。加上一个propertyinfo。通过迭代属性并使用每个属性的属性信息来创建该集合。您可以使用 propertyinfo 作为名称并获取/设置值。当他们点击提交更改时,您可以迭代列表并使用 prooertyinfo 将值设置回源属性。
-
这能回答你的问题吗? Twoway binding datagrid wpf xaml
-
不确定你想要什么。它没有写清楚。首先,使用“当前输出”和“预期输出”更新问题。您可以在 Excel 中创建预期的输出。
标签: wpf data-binding datagrid datagridviewrow