gpt4 book ai didi

silverlight - 如何将 ResourceDictionary (Styles.xaml) 中 Silverlight ListItem DataTemplate 中的按钮与处理程序连接起来?

转载 作者:行者123 更新时间:2023-12-04 02:49:32 25 4
gpt4 key购买 nike

好的,所以情况是我正在为 ResourceDictionary (Styles.xaml) 中的 ListBox 定义一个 ItemTemplate。 ListBoxItem 模板如下所示:

<ControlTemplate TargetType="ListBoxItem">
<Button Command="{Binding Path=DoSomeCommand}" Content="Test" />
</ControlTemplate>

现在,无论在何处使用此模板,我都希望将此按钮的单击绑定(bind)到可用的 ViewModel 命令来处理它。

但是这不起作用,我也试过这个:
<ControlTemplate TargetType="ListBoxItem">
<Button Command="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DoSomeCommand}" Content="Test" />
</ControlTemplate>

但仍然没有骰子。

一个有效的简单示例是,如果您在使用它的控件(资源)中定义模板,并且只使用事件处理程序(所有生成的 XAML 的处理程序相同)。

关于实现这一目标的最佳方法的任何想法或想法?我认为这一定是一个常见的场景:目标只是让用户与 ListBox 中的项目进行交互。

谢谢!

最佳答案

好的,我想我回答了我自己的问题:

解决方案似乎是使用 '嵌套' ViewModels 这里:

换句话说,我没有让我的 ListBox 直接绑定(bind)到 DTO/业务对象的集合(就像我在上面所做的那样),而是创建了一个简单的 ViewModel 来包装每个 DTO,并在其上使用命令,而不是在原始上,顶级虚拟机。

所以绑定(bind)的集合现在看起来像这样:

    TestItems = new ObservableCollection<ItemVM> ()
{
new ItemVM(),
new ItemVM(),
new ItemVM()
};

每个 ItemVM 只是包装 DTO,并具有以下命令:
public class ItemVM : INotifyPropertyChanged
{
public ItemVM ()
{
this.MyCommand = new DelegateCommand<string> ( TheCommand );
}

public ICommand MyCommand { get; private set; }
public MyBusinessObject BizObj;
}

瞧,不需要RelativeSource,我们有一个可重复使用的模板,其中包含命令。

关于silverlight - 如何将 ResourceDictionary (Styles.xaml) 中 Silverlight ListItem DataTemplate 中的按钮与处理程序连接起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2118395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com