datatemplate 相关问题

数据模板是WPF的一项功能,可让您自定义数据的表示。

如何在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。

回答 3 投票 0

是否有通过实体描述生成表、Web 视图和请求处理程序的标准方法?

我的问题是我知道某些过程的描述,并想搜索一些实现这种方法的标准技术,但不知道正确的名称。简而言之,我需要“对象模板”

回答 1 投票 0

如何获取 ItemsControl Items 模板而不是 viewmodel

我正在开发一个SpiderGraph控件。此 SpiderGraph 继承自 ItemsControl,并且可以包含继承自 ContentControl 的 SpiderGraphItems。 [StyleTypedProperty(属性 = "

回答 1 投票 0


在 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 :) }

回答 5 投票 0

如何让 AccessKey 与 NavigationView 中的 DataTemplate 一起工作

我正在使用 WinUI 3 和 WindowsAppSDK。当我使用 NavigationView 并在 NavigationViewItem 上设置 AccessKey 时,它会起作用……直到我还定义了 MenuItemTemplate。只要我们有 DataTemplate...

回答 1 投票 0

数据模板中的 WPF 文本框双向绑定不更新源

我创建了一个 ListBox,在其中我指定了一个带有 Grid 和其中两个元素(TextBlock 和 TextBox)的 DataTemplate。 ListBox 中的源是 ObservableCollection。一切都显示 fin...

回答 0 投票 0

WinUI 3 ListView Linked To Observablecollection 包含从类画布派生的图层类

我想创建一个像 photoshop 主画布这样的应用程序,它将图层画布分组, 一个列表视图,它通过每个图层的数据模板显示图层的名称和可见性按钮添加...

回答 1 投票 0

WinUI 3 链接到 Observable 集合的 ListView 包含画布

我正在开发一个 WinUI 3 应用程序,它包含一个 ListView 链接到一个包含画布的 Observablecollection,列表视图通过 DataTemplate 显示画布的名称,但是

回答 1 投票 0

自定义列和绑定

我有 DataGrid 和我的类类型的 ObservableCollection 作为数据源。我正在使用一些具有相同 DataTemplate 的 TemplateColumns,所以我想到我为该列创建类。 问题...

回答 0 投票 0

WPF数据化到一个日期时间对象列表

我有一个组合框,我想把它绑定到日期时间对象列表上,但我想以短时格式显示日期时间对象。我很确定我需要使用某种形式的数据模板, ...

回答 3 投票 0

从数据模板中绑定到viewmodel。

我有多个视频显示,它们与Mainviewmodel中的videcollection绑定。一切都很好,直到我尝试将enter命令绑定到Mainviewmodel。我不知道这个语法...。

回答 2 投票 25

从同一个DataTemplate中添加标签到标签控件,但它们不应该相互连接。

在我的wpf程序中,我希望有从数组或列表中生成的标签。我想通过每个标签来编辑文件。每个标签页都有相应的文件夹,名称相同,所以所有的标签页......

回答 1 投票 0

WPF模板。模板选择器没有收到项目

我目前的问题是,我有两个模板,应该通过模板选择器来选择。我已经定义了两个数据模板。每个模板都包含不同的stackPanel,不同的是......

回答 1 投票 0

如何只在布局的一部分使用WPF DataTemplate?

在MVVM环境中,我正在使用一个列表框,我以不同的方式可视化不同的数据类型,但有一些共同的风格元素。一个最小的示例看起来像这样:界面......。

回答 1 投票 0

UWP - 有两个不同来源的导航视图

我有一个ObservableCollection 绑定到一个NavigationView,其中Category是一个实现INotifyPropertyChanged的自定义类。我创建了一个DataTemplate来显示Category的元素。

回答 1 投票 1

删除一行后更新ListView数据模板。

我在使用ListView时遇到了一个意想不到的情况。我有一个ListView,它的行根据其奇偶性有一个背景色。它工作得很好,直到我从ListView中删除一个元素。

回答 1 投票 0

WPF: UserControl在设计时不显示在一个ContentControl的Datatemplate中。

我花了好几天的时间试图找出这里的问题,我怀疑这是VS中的一个bug,或者是我所看到的一些简单的东西。我有一个ContentControl,服务于一个视图模型:...

回答 1 投票 0

ListView中的TextBox与对象绑定,双向绑定无法使用

我有一个Model类如下 public class VmServiceMethodsViewDataGridModel : BindableBaseThreadSafe { private object _currentParameterValue; public object ...

回答 1 投票 1

在样式中设置一个图片作为Button的内容。

我有一个WPF按钮是这样定义的。 下面是该按钮的样式。 ...</root>

回答 2 投票 26

© www.soinside.com 2019 - 2024. All rights reserved.