【问题标题】:Create ListBoxItem property创建 ListBoxItem 属性
【发布时间】:2012-05-08 09:41:59
【问题描述】:

我有两个列表框和一个按钮。 Button 将 List1.SelectedItems 发送到 List2。我想为 List1 中已添加到 List2 的项目添加视觉提示,类似于选择项目时的视觉提示。是否可以向它们添加属性以便完成此操作?

 _______             _______
|       |     _     |       |
| List1 |    |>|    | List2 |
|_______|           |_______|

这里是使用 IsSelected 属性修改背景的示例。

<DataTemplate.Triggers> 
    <Trigger Property="IsSelected" Value="True"> 
        <Setter TargetName="listItem" Property="Background" Value="Blue" /> 
    </Trigger> 
</DataTemplate.Triggers>

我想添加一个名为“IsAdded”的附加属性,如果设置为 True,它也会影响背景。是否有可能,或者是否有替代方法?

谢谢

【问题讨论】:

  • 为什么不把它从 List1 中删除?
  • 问题是您必须保留 List1 的干净副本,因此当项目移回 List1 时,您知道在哪里插入它们。这个特殊的实现也是将它们保留在列表中但带有某种 UI 提示的理想选择

标签: wpf properties triggers listbox datatemplate


【解决方案1】:

我希望你使用ViewModel 类或类似的类来代表你的物品。您需要的 - 是将属性 IsAdded 添加到项目类中,并且,当您处理 Button.Click 事件(或更好 - 您的 ViewModel 具有将 List1 中的选定项目插入到 List2 的 ICommand 属性)时,您可以对添加到列表2中的选定项目感到遗憾。

private bool isAdded;
public bool IsAdded
{
    get { return isAdded; }
    set
    {
        if (isAdded == value)
            return;
        isAdded = value;
        OnPropertyChanged("IsAdded");
    }
}

其中OnPropertyChanged 方法将引发INotifyPropertyChanged 接口(see msdn article) 的PropertyChanged 事件。

当你处理Button.Click时,你就知道要添加哪些元素,所以把这行代码放在那里:

...
foreach(var item in List1.SelectedItems)
{
    item.IsAdded = true;
}
...

然后,将以下触发器添加到您的 DataTemplate.Triggers 集合中:

<DataTrigger Binding="{Binding Path=IsAdded, Mode=OneWay}" Value="True">
    <Setter TargetName="listItem" Property="Background" Value="Red" />
</DataTrigger>

【讨论】:

  • 谢谢,这就是我要找的答案
猜你喜欢
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多