- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用户控件,它为该控件定义了一个 ItemsControl 和一个 ItemTemplate,即,
<ItemsControl Name="ItemsControl">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Name="SelectionButton" Content="MyButton"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
在后面的代码中,我指定了一个依赖属性,使我能够绑定(bind) ItemsControl 的 ItemsSource 属性,即,
public static readonly DependencyProperty ButtonSourceProperty = DependencyProperty.Register(
"ButtonSource", typeof(IEnumerable), typeof(MyControl),
new PropertyMetadata(null, new PropertyChangedCallback(OnButtonSourceChanged)));
public IEnumerable ButtonSource
{
get { return (IEnumerable)GetValue(ButtonSourceProperty); }
set { SetValue(ButtonSourceProperty, value); }
}
private static void OnButtonSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var buttonSelectionControl = (ButtonSelectionControl)d;
buttonSelectionControl.ItemsControl.ItemsSource = (IEnumerable)e.NewValue;
}
public static void SetButtonSource(DependencyObject obj, IEnumerable enumerable)
{
obj.SetValue(ButtonSourceProperty, enumerable);
}
public static IEnumerable GetButtonSource(DependencyObject obj)
{
return (IEnumerable)obj.GetValue(ButtonSourceProperty);
}
这样在 xaml 中我可以如下设置 MyControl 的源
<local:MyControl ButtonSource={Binding MyCollection} \>
这行得通,但我如何在 MyControl 中定义一个依赖属性来指定要在 MyCollection 中绑定(bind)的命令?目前我在 xaml 中为命令绑定(bind)声明了以下内容
Command="{Binding DataContext.MyCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
CommandParameter="{Binding .}"
我怎样才能以这样一种方式抽象它,我可以在 xaml 中设置要绑定(bind)的项目命令,比如:
<local:MyControl ButtonSource={Binding MyCollection}
ButtonCommand={Binding MyCommand} \>
感谢指点。
最佳答案
确保您的 UserControl 具有对 ICommand 的依赖属性,假设这称为“ButtonCommand”。
你应该能够在你的控件的模板中绑定(bind)到这个:
<ItemsControl Name="ItemsControl">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Name="SelectionButton" Content="MyButton"
Command="{Binding ButtonCommand, RelativeSource={RelativeSource AncestorType=wpfApplication1:UserControl1}}"
CommandParameter="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
然后单击按钮应该引发在用户控件中定义的“ButtonCommand”依赖属性中的命令集。
您的 ButtonCommand 将定义(在 UserControl 代码内)如下所示:
public static readonly DependencyProperty ButtonCommandProperty = DependencyProperty.Register("ButtonCommand", typeof (ICommand), typeof (UserControl1), new PropertyMetadata(default(ICommand)));
public ICommand ButtonCommand { get { return (ICommand) GetValue(ButtonCommandProperty); } set { SetValue(ButtonCommandProperty, value); }}
创建一个实现 ICommand 的命令类是样板文件,您可能知道。通过将其放入您的按钮 xaml 中:
CommandParameter="{Binding}"
..它将允许您在命令处理代码中使用列表中的项目:
public class TheCommand : ICommand
{
public void Execute(object parameter)
{
var yourListItemObject = parameter as yourListItemObjectType;
}
// boilerplate stuff
public bool CanExecute(object parameter) { return true; }
public event EventHandler CanExecuteChanged;
}
关于ItemTemplate 命令的 WPF 依赖属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30706328/
我有一个带有许多ItemTemplates的ListView。每个ItemTemplate中有一个Repeater,显示每个ItemTemplate中的文件列表(即类别)。目前,所有类别中的所有文件都
我有一个“报告”页面,该页面将根据表格中的事件报告数量显示动态数量的按钮(格式为 ASP:Hyperlinks)。除了我想要的显示,我可以让一切正常工作。我想并排查看我的按钮(左边是“ItemTemp
我有一个 UserControl我用来显示 UIElement 的列表s。该控件由单个 ItemsControl它是 ItemPanelTemplate切换为水平 StackPanel , 它的 It
我在 ListBox 中使用 ComboBox 作为 ItemTemplate。我的 ComboBox 是可编辑的。当用户在组合框中使用鼠标滚轮时,它会更改当前值。我不想要那个。我想让 ListBox
我有服务器控件,例如在另一个 gridview 的模板字段中带有 gridview 的弹出窗口:
我有一个显示 2 个列表的窗口,它们应该使用相同的模板,所以我考虑将模板放入我的窗口中的资源中,如下所示:
我确信这很简单,但我似乎无法弄清楚如何去做。基本上我有一个来自 azure 移动服务数据库的客户列表。到目前为止一切正常,但我想根据数据为列表框中的每个项目设置项目模板。我有 2 个模板,一个用于公司
我有一个用户控件,它为该控件定义了一个 ItemsControl 和一个 ItemTemplate,即,
我正在处理icons.XAML 图像,将它们插入到文本块上方的按钮中。一切看起来都很棒,直到我将鼠标悬停在图像本身上。一个灰色框只出现在图片上: 如何摆脱灰盒? 这是其中一个图标: 这是
我正在创建一个带有绑定(bind)到项目名称的列表框的 WPF 应用程序。作为装饰元素,我想在列表中的每个项目旁边放置一个小图标,类似于 Outlook 在其个人文件夹列表中所做的方式。对于初学者,我
当 PivotItem 声明为: Text 但是我在使用绑定(bind)的时候如何设置Margin:
我有一个使用 MVVM 的 WPF 应用程序。 此代码来 self 的 ResourceDictionary.xaml
我试图显示一个 ComboBox,其 ItemsSource 是控件的集合(它是 PropertyGrid 的一部分,ComboBox 应该显示控件的名称,并且用户应该能够选择其中一个控件)。这是该问
我希望这个 Ellipse 从其对应的 BallViewModel 中获取其坐标,并使用它们来确定其在 Canvas 内的位置。 球列表绑定(bind)List在 mainviewmodel 中,因此
我有一个带有ItemTemplate的以下ListBox
我有一个 ListView与 ItemTemplate .对于我 ItemSource 中的每个项目,我想遍历项目中的一个属性并在我的 ViewCell 中创建一个部分. 所以每一项都是 Downlo
我有一个 ListBox 控件的情况。在项目模板内有一个按钮。当我单击按钮时,我想将所述 ListBox 的所选项目更改为按钮所在的项目。目前,我可以通过单击项目模板中的其他位置来更改所选项目,但如果
我为 ListViewItem 创建了一个模板。 它并没有填满所有的空间。 我的模板如下:
我为 ListViewItem 创建了一个模板。 它并没有填满所有的空间。 我的模板如下:
我有一个 MenuItem 类型的 WPF 控件模板:
我是一名优秀的程序员,十分优秀!