我有一个包含ItemControl标记的XAML页面(该应用程序使用MVVM轻量级框架):
<ItemsControl MinWidth="100" MinHeight="25" ItemsSource="{Binding Path=Options}" HorizontalAlignment="Left" d:LayoutOverrides="Height" Margin="10,0">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
此控件有一个项目源,它是一个Option对象列表。此项目控件的数据模板如下:
<DataTemplate DataType="{x:Type Sales:Option}">
<local:SalesOptionButton d:LayoutOverrides="Width, Height" DataContext="{Binding}"/>
</DataTemplate>
我有一个与SalesOptionButton控件关联的视图模型,如下所示:
公共类SalesOptionButton { private string _name; 私有选项_Option;
public ICommand SelectedOptionButtonCommand { get; set; }
public string Name
{
get { return _name; }
set { SetStructPropertyValue(ref _name, value); }
}
public Option Option
{
get { return _scriptOption; }
set { SetPropertyValue(ref _scriptOption, value); }
}
public SalesScriptOptionButton(ScriptOption option)
{
Option = option;
Name = option.OptionText;
}
protected override void RegisterForMessages()
{
SelectedOptionButtonCommand = new RelayCommand(OptionButtonSelected);
}
private void OptionButtonSelected()
{
MessengerService.Send(ScriptOptionSelectedMessage.Create(ScriptOption));
}
protected override void SetDesignTimeInfo(){}
}
以下是选项控制的XAML:
<UserControl [INCLUDES]>
<Button Height="25" Padding="1" MinWidth="100" Content="{Binding Name}" Command="{Binding SelectedOptionButtonCommand}"/>
</UserControl>
这样做,对于数据源中的每个选项,都会创建一个按钮。这些按钮应显示选项的名称,并在单击按钮时向主应用程序发送消息,该消息将处理该单击(设置所选选项)。
我看到的问题是正在创建按钮但没有其他任何东西被绑定(按钮上没有显示选项名称,按钮单击不起作用)。任何人都可以给我一个想法,为什么这不起作用,就像我认为它应该是?
答案 0 :(得分:0)
您没有将数据模板设置为商品控件的属性。
<ItemsControl ItemTemplate={StaticResource OptionTemplate} .../>
<DataTemplate x:Key="OptionTemplate" DataType="{x:Type Sales:Option}">
<local:SalesOptionButton d:LayoutOverrides="Width, Height" DataContext="{Binding}"/>
</DataTemplate>
答案 1 :(得分:0)
当代码的某些部分似乎缺失时,很难破译你的帖子。你说:
此控件有一个项目源,它是一个Option对象列表。此项目控件的数据模板如下:
<DataTemplate DataType="{x:Type Sales:Option}"> <local:SalesOptionButton d:LayoutOverrides="Width, Height" DataContext="{Binding}"/> </DataTemplate>
您尚未向我们展示您的Option
课程 - 仅限您SalesOptionButton
课程。据推测,您的Option
类型有一些属性可以生成关联的SalesOptionButton
实例?如果是这种情况,那么您的数据模板在这里是错误的:
<local:SalesOptionButton d:LayoutOverrides="Width, Height" DataContext="{Binding}"/>
您将DataContext
的{{1}}设置为SalesOptionButton
实例,而不是Option
实例。我猜(我必须)你想要这样的东西:
SalesOptionButton