我有一个基本的DataGrid
我使用创建的敌人名单的游戏项目我一直在玩弄:WPF绑定到的ObservableCollection - 只有当行完成更新集合
<DataGrid x:Name="EnemyGrid" Margin="0,10,0,0" VerticalAlignment="Top" RenderTransformOrigin="8.273,3.781" Height="162" ItemsSource="{Binding}" CanUserReorderColumns="False" ColumnWidth="*" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name, UpdateSourceTrigger=Explicit}" ClipboardContentBinding="{x:Null}" Header="Name"/>
<DataGridTextColumn Binding="{Binding Level, UpdateSourceTrigger=Explicit}" ClipboardContentBinding="{x:Null}" Header="Level"/>
<DataGridTextColumn Binding="{Binding Role, UpdateSourceTrigger=Explicit}" ClipboardContentBinding="{x:Null}" Header="Role"/>
</DataGrid.Columns>
</DataGrid>
所述DataGrid
被绑定到由json
文件中读入一个ObservableCollection
:
public partial class MainWindow : Window
{
public ObservableCollection<Enemy> EnemyList;
public MainWindow()
{
InitializeComponent();
var data = JsonHelpers.ReadFile<Enemy>("Enemy.json");
EnemyList = data["Enemy"];
EnemyGrid.DataContext = EnemyList;
}
}
在它的事项的情况下,ReadFile的方法使用JSON.Net
:
public static Dictionary<string, ObservableCollection<T>> ReadFile<T>(this string fileName)
{
string text = File.ReadAllText(dataPath + fileName);
Dictionary<string, ObservableCollection<T>> data = JsonConvert.DeserializeObject<Dictionary<string, ObservableCollection<T>>>(text);
return data;
}
旁注:返回类型为Dictionary<string, ObservableCollection<T>>
因为我需要保持在json
文件中的表声明。如果我可以保持格式为"TableName" : [{Table}]
没有这个,那么我会很感激的输入。
总之,我遇到的问题与DataGrid
发布更新的时间有关。根据一些相关的问题,我为Enemy
类创建了一个空构造函数。只要我在EnemyGrid
上的Name
字段中键入第一个字符,该集合就会尝试更新,并获得Enemy
类上大多数属性的默认值。
另请注意,尽管我已经在列上设置了UpdateSourceTrigger=Explicit
,但只要我开始键入,集合就会继续更新。理想情况下,我希望在完成在row
中添加值之后创建对象,但更新会在编辑cell
后发生。
我怎样才能让DataGrid
迫不及待地让我有所有我需要的参数创建对象时执行此更新?