【发布时间】:2020-12-15 02:38:02
【问题描述】:
我正在尝试为我的应用程序制作 WPF UI,但被困在将 BindingList 绑定到 DataGrid 上。 它根据列表中的项目数量显示行,但单元格是空的
将集合类型更改为 List 或 ObservableCollection 没有产生任何结果
MainWindow.xaml - DataGrid 代码
<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>
MainWindow.xaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
VoiceApp.LoadData("Elite.xml");
DataGrid1.ItemsSource = VoiceApp.commands;
}
}
VoiceApp.commands 是public 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>);
}
}
【问题讨论】:
-
"单元格为空" - 但您已为项目的 Command 和 Description 属性赋值?
-
您能否展示一个完整的代码,让我们可以看到
VoiceApp是什么以及如何分配commands等? -
是否有任何日志输出表明您的绑定失败?
-
VoiceApp.commands 在 UI 的 WinForms 变体中运行良好