ItemsControl没有正确绑定对象

时间:2012-03-08 21:25:43

标签: c# wpf mvvm-light wcf-binding

我有一个包含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>

这样做,对于数据源中的每个选项,都会创建一个按钮。这些按钮应显示选项的名称,并在单击按钮时向主应用程序发送消息,该消息将处理该单击(设置所选选项)。

我看到的问题是正在创建按钮但没有其他任何东西被绑定(按钮上没有显示选项名称,按钮单击不起作用)。任何人都可以给我一个想法,为什么这不起作用,就像我认为它应该是?

2 个答案:

答案 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