syncfusion-wpf-ai-assistview — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited syncfusion-wpf-ai-assistview (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Use this skill when:
PromptRequest events or Stop Responding functionalityViewTemplateSelectorNuGet Package: Syncfusion.SfChat.Wpf Namespace: Syncfusion.UI.Xaml.Chat Key Classes: SfAIAssistView, TextMessage, AIMessage, Author, TypingIndicator, AssistConversationItem
<!-- MainWindow.xaml -->
<Window xmlns:syncfusion="clr-namespace:Syncfusion.UI.Xaml.Chat;assembly=Syncfusion.SfChat.WPF">
<Grid>
<Grid.DataContext>
<local:ViewModel/>
</Grid.DataContext>
<syncfusion:SfAIAssistView
Messages="{Binding Chats}"
CurrentUser="{Binding CurrentUser}"
Suggestions="{Binding Suggestions}"
ShowTypingIndicator="{Binding ShowTypingIndicator}"
TypingIndicator="{Binding TypingIndicator}" />
</Grid>
</Window>// ViewModel.cs
public class ViewModel : INotifyPropertyChanged
{
public ObservableCollection<object> Chats { get; set; }
public Author CurrentUser { get; set; }
public ViewModel()
{
Chats = new ObservableCollection<object>();
CurrentUser = new Author { Name = "User" };
Chats.Add(new TextMessage
{
Author = CurrentUser,
Text = "Hello, how can you help me?"
});
Chats.Add(new TextMessage
{
Author = new Author { Name = "AI" },
Text = "I can answer questions and help with tasks."
});
}
}📄 Read: references/getting-started.md
ObservableCollection<object>TextMessage + Author binding patternCurrentUser configuration📄 Read: references/openai-integration.md
Microsoft.SemanticKernel NuGet setupIChatCompletionService + Kernel configurationAIAssistChatService pattern for async responsesCollectionChanged trigger to invoke AI callsAIMessage with ContentTemplate (AI icon)ViewTemplateSelector for Markdown rendering via MdXamlShowTypingIndicator with async operations📄 Read: references/suggestions-and-typing-indicator.md
Suggestions property (IEnumerable<string>) bindingTypingIndicator object setup in ViewModelShowTypingIndicator property📄 Read: references/input-toolbar.md
IsInputToolbarVisible propertyInputToolbarPosition (Left/Right)InputToolbarItem (ItemTemplate, IsEnabled, Tooltip, Visible)InputToolbarItemClicked event handlingInputToolbarHeaderTemplate for file-upload-style headers📄 Read: references/response-toolbar.md
IsResponseToolbarVisible propertyResponseToolbarItem with Index, ItemType, ItemTemplateResponseToolbarItemClicked event handling📄 Read: references/events-and-stop-responding.md
PromptRequest event + PromptRequestEventArgsInputMessage and Handled property patternEnableStopResponding propertyStopResponding event and StopRespondingCommand (MVVM)StopRespondingTemplate customization📄 Read: references/conversation-history.md
ShowNavigationView property to show/hide the history paneConversations (ObservableCollection<AssistConversationItem>) data sourceAssistConversationItem with Title, DateTime, and AssistItems messagesNavigationHeader for the navigation pane header text📄 Read: references/customization.md
EmptyView for simple text/objects in the empty stateEmptyViewTemplate for rich DataTemplate empty statesInputPlaceholderText for input-box hint textEmptyView interacts with BannerTemplate| Property | Type | Purpose |
|---|---|---|
Messages | ObservableCollection<object> | Chat message collection |
CurrentUser | Author | Identifies the local user |
Suggestions | IEnumerable<string> | Suggestion chips shown after AI response |
ShowTypingIndicator | bool | Shows/hides typing animation |
TypingIndicator | TypingIndicator | Typing indicator with Author |
IsInputToolbarVisible | bool | Shows custom input toolbar (default: false) |
IsResponseToolbarVisible | bool | Shows response toolbar (default: true) |
EnableStopResponding | bool | Enables Stop Responding button (default: false) |
ViewTemplateSelector | DataTemplateSelector | Custom rendering per message type |
ShowNavigationView | bool | Shows/hides the conversation history navigation pane (default: false) |
Conversations | ObservableCollection<AssistConversationItem> | Archived conversations shown in the history pane |
NavigationHeader | string | Header text for the navigation pane (default: empty) |
EmptyView | object | Simple content shown in the empty state |
EmptyViewTemplate | DataTemplate | Rich template shown in the empty state |
InputPlaceholderText | string | Placeholder/hint text in the input box |
// Subscribe to CollectionChanged on Chats
Chats.CollectionChanged += async (s, e) =>
{
if (e.Action == NotifyCollectionChangedAction.Add
&& e.NewItems[0] is TextMessage msg
&& msg.Author.Name == CurrentUser.Name)
{
ShowTypingIndicator = true;
var reply = await aiService.GetResponseAsync(msg.Text);
Chats.Add(new AIMessage { Author = aiAuthor, Text = reply });
ShowTypingIndicator = false;
}
};Suggestions = new List<string> { "Tell me more", "Give an example", "Summarize" };<syncfusion:SfAIAssistView PromptRequest="OnPromptRequest" />private void OnPromptRequest(object sender, PromptRequestEventArgs e)
{
// e.InputMessage contains the user's text
e.Handled = true; // Prevent default processing
}<syncfusion:SfAIAssistView
Messages="{Binding Chats}"
CurrentUser="{Binding CurrentUser}"
Conversations="{Binding Conversations}"
ShowNavigationView="True"
NavigationHeader="Sync AI Assist" />Conversations = new ObservableCollection<AssistConversationItem>
{
new AssistConversationItem
{
Title = "Scotland",
DateTime = DateTime.Today,
AssistItems = new ObservableCollection<object>
{
new TextMessage { Author = CurrentUser, Text = "Tell me about Scotland." },
new TextMessage { Author = new Author { Name = "AI" }, Text = "Scotland is known for its castles and landscapes." }
}
}
};<syncfusion:SfAIAssistView
Messages="{Binding Chats}"
CurrentUser="{Binding CurrentUser}"
InputPlaceholderText="Type your message here...">
<syncfusion:SfAIAssistView.EmptyViewTemplate>
<DataTemplate>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="Hi, how can I help you?" FontSize="20" FontWeight="Bold" HorizontalAlignment="Center" />
<TextBlock Text="Ask anything to get started." FontSize="16" HorizontalAlignment="Center" />
</StackPanel>
</DataTemplate>
</syncfusion:SfAIAssistView.EmptyViewTemplate>
</syncfusion:SfAIAssistView>~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.