我有一個基本的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
迫不及待地讓我有所有我需要的參數創建對象時執行此更新?