C#中,WPF DataGrid显示空行



我正试图为我的应用程序制作WPF UI,但在将BindingList绑定到DataGrid时遇到了困难。它根据列表中项目的数量显示行,但单元格为空

将集合类型更改为List或ObservableCollection未产生任何结果

MainWindow.xaml-数据网格代码

<DataGrid x:Name="DataGrid1" Grid.Column="1" CanUserResizeRows="False" CanUserResizeColumns="False" ColumnWidth="*" AutoGenerateColumns="False">
<DataGrid.Resources>
<DataTemplate x:Key="ButtonCellTemplate">
<DataGridCell>
<Button x:Name="EditButton" Click="EditButton_Click">Edit</Button>
</DataGridCell>
</DataTemplate>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="Command" Binding="{Binding Command}"/>
<DataGridTextColumn Header="Description" Binding="{Binding Description}"/>
<DataGridTemplateColumn Width="Auto" CellTemplate="{StaticResource ButtonCellTemplate}"/>
</DataGrid.Columns>
</DataGrid>

主窗口.xaml.cs

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
VoiceApp.LoadData("Elite.xml");
DataGrid1.ItemsSource = VoiceApp.commands;
}
}

VoiceApp.commandspublic static BindingList<VoiceCommand> commands { get; set; }

VoiceCommand.cs

public class VoiceCommand
{
public string Command { get; set; }
public string Description { get; set; }
public BindingList<KeyAction> actions = new BindingList<KeyAction>();
}

VoiceApp.cs

public static class VoiceApp
{
static readonly CultureInfo eng = new CultureInfo("en-US");
public static SpeechRecognitionEngine recognitionEngine = new SpeechRecognitionEngine(eng);
public static BindingList<VoiceCommand> commands { get; set; } = new BindingList<VoiceCommand>();
public static void ActivateRecognition()
{
Choices choices = new Choices(commands.Select(x => x.Command).ToArray());
GrammarBuilder grammarBuilder = new GrammarBuilder(choices);
grammarBuilder.Culture = eng;
Grammar grammar = new Grammar(grammarBuilder);
recognitionEngine.LoadGrammar(grammar);
recognitionEngine.SetInputToDefaultAudioDevice();
recognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
}
public static void DeactivateRecognition()
{
recognitionEngine.RecognizeAsyncStop();
}
public static void SaveData(string path = "testSave.xml")
{
var ser = new XmlSerializer(typeof(List<VoiceCommand>));
var saveData = commands.ToList();
var writer = new FileStream(Path.ChangeExtension(path, "xml"), FileMode.Create);
ser.Serialize(writer, saveData);
}
public static void LoadData(string path = "testSave.xml")
{
var ser = new XmlSerializer(typeof(List<VoiceCommand>));
var reader = new FileStream(path, FileMode.Open);
commands = new BindingList<VoiceCommand>(ser.Deserialize(reader) as List<VoiceCommand>);
}
}

问题在于保存的文件本身,因为属性保存在不同的名称下。修复它们解决了问题。

最新更新