数据模板是WPF的一项功能,可让您自定义数据的表示。
DataTemplate 可以通过将其绑定到具有相同数据类型的不同属性来重用吗?
我使用具有相同数据类型的多个列的 DataGrid。我想对列使用 DataGridTemplateColumn,并为 CellTemplate 定义一个 DataTemplate,为 CellEditingTemplat 定义一个 DataTemplate...
我在 .NET MAUI 中使用 httpClient.GetAsync 调用 Rest 服务时遇到问题
我正在尝试从.NET MAUI 调用一些Azure Restful 函数。无论我如何配置等待语句,它们似乎都不会正确地警告我的线程,以便显示我检索到的数据。
如何在 WinUI 中从 DataTemplate 绑定到 xaml 根对象的成员?
我尝试绑定到 DataTemplate 中我的页面的成员。 据此,应该可以将 Page 转换为我的自定义类型。 https://learn.microsoft.com/en-us/windows/uwp/xaml-platform/x-bind-markup-
WPF XAML DataGridTemplateColumn 分配给两个具有条件类型的 DataTemplate
在出色的 WPF 和 XAML 中挣扎,我发现了很多信息,例如这个问题, 关于如何将多个 DataTemplate 与数据类型条件一起使用,但我不知道如何将它们连接到 Data...
基本上我有一个名为“Exercise”的道具抽象类。它有两个子类“Cardio”和“Strength”,它们具有不同的属性。我现在正在处理的页面的目的是允许
在 WPF C# 中根据数据网格中的另一个组合框过滤 DataGrid 中的组合框?
在我的示例中,我在数据网格中有3个组合框,分别显示国家、省份和地区。我如何以这种方式按国家过滤省份和按省份过滤地区
如何将DataGridColumn作为命令参数传递? (WPF)
我的 DataGrid 有一些具有相同模板的列。 我的 DataGrid 有一些具有相同模板的列。 <DataTemplate x:Key="ButtonCellTemplate"> <Button Content="TestButton" Command="{Binding TestCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridColumn}}" /> </DataTemplate> 它不起作用,我知道为什么。 如何将 DataGridColumn(或 DataGridColumnHeader)作为命令参数传递? 换句话说,我需要知道在 ViewModel 中从哪一列调用该命令。 如果我们不涉及在 ViewModel 中接收此类信息从根本上来说是概念上错误的问题,那么这可以实现,但方式略有不同。 您对 DataGrid 可视化树存在误解。它是 ItemsControl 的继承者。因此,每一行旨在显示源集合的一个元素。单元格放置在一行中以表示该行的一个或另一个元素 - 通常是该元素的属性之一。这样的列实际上并不存在。这些只是细胞从中接收所需数据的容器。因此,该列不是单元格的祖先,更不用说其内容了。 但是单元格具有与其所在列进行通信的属性。你可以用它。 <DataTemplate x:Key="ButtonCellTemplate"> <Button Content="TestButton" Command="{Binding TestCommand}" CommandParameter="{Binding Column, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridCell}}}"/> </DataTemplate>
我有一个ListView,里面有一堆人,支持多选。我希望拥有它,以便当通过复选框选择一个人时,会出现其他控件 - 在此......
ListView 中的 DataTemplate(带有 VirtualizingStackPanel)导致 StackOverflow
我有一种数据类型元数据,其中包含视频或图像的文件路径。我正在尝试使用 DataTemplate 来显示该数据类型。将会有数千个这样的物体......
我正在尝试绑定 DataTemplate 中不同类的两个属性。 我正在尝试绑定 DataTemplate 中不同类的两个属性。 <DataTemplate x:Key="DemoItemTemplate" x:DataType="local:DemoInfo"> <NavigationViewItem Visibility="{Binding Visibility, Mode=TwoWay}" Content="{x:Bind Name}"/> </DataTemplate> 将此 DataType 的 DemoInfo 设置为 DataTemplate,并从 Name 更新 DemoInfo 值。 我尝试过将视图模型视为源和相对源绑定。但是 Visibility 属性绑定在 ViewModel 类中不起作用。有什么建议如何实现这一目标吗? Visibility="{Binding Visibility, Source={StaticResource viewModel}}" AFAIK,你不能在 UWP 中使用多重绑定,你可以尝试使用 Locator 什么是 ViewModelLocator,与 DataTemplates 相比,它的优点/缺点是什么? 如何在DataTemplate中绑定两个不同的类属性 如果您将 Visibility 与 StaticResource 绑定,请在页面 Resources 中声明 ViewModel 类,如下所示。 视图模型 public class ViewModel { public ViewModel() { Visibility = false; } public bool Visibility { get; set; } } Xaml <Page.Resources> <local:ViewModel x:Key="ViewModel" /> </Page.Resources> <DataTemplate x:DataType="local:Item"> <TextBlock Width="100" Height="44" Text="{x:Bind Name}" Visibility="{Binding Visibility, Source={StaticResource ViewModel}}" /> </StackPanel> </DataTemplate> 更新 如果您希望 Visibility 值在运行时动态更改,您需要为 ViewModel 类实现 INotifyPropertyChanged 接口。 public class ViewModel : INotifyPropertyChanged { public ViewModel() { Visibility = false; } private bool _visibility; public bool Visibility { get { return _visibility; } set { _visibility = value; OnPropertyChanged(); } } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged([CallerMemberName] string PropertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName)); } } 更多详情请参考深度数据绑定官方文档 我可能是错的,但我认为 Visibility 属性有一个专用枚举,其中包含 Visibility 属性的所有可能选项(Visibility Enum)。因此,您的绑定可能工作得很好,但绑定属性的 Type 需要使用 Visibility 为 System.Windows 类型。 顺便说一句,我无论如何都不会在视图模型中添加可见性属性。我认为更标准的方法是在绑定视图后面的直接代码中具有可见性DependencyProperty。
是否有通过实体描述生成表、Web 视图和请求处理程序的标准方法?
我的问题是我知道某些过程的描述,并想搜索一些实现这种方法的标准技术,但不知道正确的名称。简而言之,我需要“对象模板”
如何获取 ItemsControl Items 模板而不是 viewmodel
我正在开发一个SpiderGraph控件。此 SpiderGraph 继承自 ItemsControl,并且可以包含继承自 ContentControl 的 SpiderGraphItems。 [StyleTypedProperty(属性 = "
带样式的自定义 WPF ListView(使用 DataTemplate)——如何添加标题?
我有以下代码 行的数据模板 ...
在 ComboBox DataTemplate 中获取 TextBlock 的值
我有以下 XAML: 我有以下 XAML: <ComboBox Height="23" HorizontalAlignment="Left" Grid.Row="6" Grid.Column="2" Name="cbo_team" VerticalAlignment="Top" Width="148" DataContext="{Binding ElementName=cbo_component, Path=SelectedItem}" SelectedIndex="0"> <ComboBox.ItemsSource> <Binding XPath="Teams/Team/@id" Converter="{StaticResource xmlConverter}"> <Binding.ConverterParameter> <local:XmlConverterParameter XPathTemplate="/Products/Teams/Team[{0}]" XPathCondition="@id='{0}'" /> </Binding.ConverterParameter> </Binding> </ComboBox.ItemsSource> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding XPath=@name}" /> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> 在 C# 中,我试图获取 TextBlock 中当前选定项中的 ComboBox 的值。我怎么做? 这个问题差不多,但唯一的答案没有帮助。 检查这个样本。文本块(组合框下方)显示组合框中当前选定的 xml 元素的名称属性的值。将弹出一个消息框,其中包含在可视化树中查找的相同结果。初始选择更改时查找失败。看起来组合框项目是在设置所选项目后创建的。 XAML: <Window x:Class="CBTest.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="300" Width="300"> <Window.Resources> <XmlDataProvider x:Key="UsersData" XPath="Users"> <x:XData> <Users xmlns=""> <User name="Sally" /> <User name="Lucy" /> <User name="Linus" /> <User name="Charlie" /> </Users> </x:XData> </XmlDataProvider> </Window.Resources> <StackPanel> <ComboBox Name="_comboBox" ItemsSource="{Binding Source={StaticResource UsersData},XPath=*}" SelectedIndex="0" SelectionChanged="OnComboBoxSelectionChanged"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding XPath=@name}" Name="nameTextBlock" /> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> <!-- Below shows how to get the value of selected item directly from the data. --> <TextBlock DataContext="{Binding Path=SelectedItem, ElementName=_comboBox}" Text="{Binding XPath=@name}" /> </StackPanel> </Window> 后面的代码,展示了如何通过遍历可视化树直接获取文本: private void OnComboBoxSelectionChanged(object sender, SelectionChangedEventArgs e) { ComboBox comboBox = sender as ComboBox; ComboBoxItem comboBoxItem = comboBox.ItemContainerGenerator.ContainerFromItem(comboBox.SelectedItem) as ComboBoxItem; if (comboBoxItem == null) { return; } TextBlock textBlock = FindVisualChildByName<TextBlock>(comboBoxItem, "nameTextBlock"); MessageBox.Show(textBlock.Text); } private static T FindVisualChildByName<T>(DependencyObject parent, string name) where T : DependencyObject { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) { var child = VisualTreeHelper.GetChild(parent, i); string controlName = child.GetValue(NameProperty) as string; if (controlName == name) { return child as T; } T result = FindVisualChildByName<T>(child, name); if (result != null) return result; } return null; } 抱歉来晚了一点 :) 但以下也有效(具有讽刺意味的是和你在同一个修复中!!) TextBlock tb1 = (TextBlock)cbo_team.SelectedItem; MessageBox.Show(tb1.Text); private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { ListBox ContactListBox = sender as ListBox; ListBoxItem listBoxItem = ContactListBox .ItemContainerGenerator.ContainerFromItem(ContactListBox.SelectedItem) as ListBoxItem; if (listBoxItem == null) { return; } TextBlock txtBlock = FindVisualChildByName<TextBlock>(listBoxItem, "ListTextBlock"); MessageBox.Show(txtBlock.Text); } private static T FindVisualChildByName<T>(DependencyObject parent, string name) where T : DependencyObject { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) { var child = VisualTreeHelper.GetChild(parent, i); string controlName = child.GetValue(NameProperty) as string; if (controlName == name) { return child as T; } T result = FindVisualChildByName<T>(child, name); if (result != null) return result; } return null; } 其他人已经建议使用 SelectionChanged 事件。没有测试下面的代码,但你可以试一试。 private void OnMyComboBoxChanged(object sender, SelectionChangedEventArgs e) { TextBlock tvContent = (sender as ComboBox).SelectedItem as TextBlock; string content = tvContent.Text; } private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { var comboBox = (ComboBox)sender; ComboBoxItem comboAsTextblock = (ComboBoxItem)comboBox.SelectedItem; string comboBoxItemText = comboAsTextblock.Content.ToString(); // comboBoxItemText is what you want :) }
如何让 AccessKey 与 NavigationView 中的 DataTemplate 一起工作
我正在使用 WinUI 3 和 WindowsAppSDK。当我使用 NavigationView 并在 NavigationViewItem 上设置 AccessKey 时,它会起作用……直到我还定义了 MenuItemTemplate。只要我们有 DataTemplate...
我创建了一个 ListBox,在其中我指定了一个带有 Grid 和其中两个元素(TextBlock 和 TextBox)的 DataTemplate。 ListBox 中的源是 ObservableCollection。一切都显示 fin...
WinUI 3 ListView Linked To Observablecollection 包含从类画布派生的图层类
我想创建一个像 photoshop 主画布这样的应用程序,它将图层画布分组, 一个列表视图,它通过每个图层的数据模板显示图层的名称和可见性按钮添加...
WinUI 3 链接到 Observable 集合的 ListView 包含画布
我正在开发一个 WinUI 3 应用程序,它包含一个 ListView 链接到一个包含画布的 Observablecollection,列表视图通过 DataTemplate 显示画布的名称,但是
我有 DataGrid 和我的类类型的 ObservableCollection 作为数据源。我正在使用一些具有相同 DataTemplate 的 TemplateColumns,所以我想到我为该列创建类。 问题...
我有一个组合框,我想把它绑定到日期时间对象列表上,但我想以短时格式显示日期时间对象。我很确定我需要使用某种形式的数据模板, ...