【问题标题】:How to bind Listbox to two properties?如何将列表框绑定到两个属性?
【发布时间】:2011-03-04 16:27:42
【问题描述】:

在 Silverlight 中,我有一个将 DataContext 设置为 ViewModel 类的网格。
ViewModel 包含项目列表(每个项目都包含 int ID 和字符串文本)和一个整数“ID”,它标识当前活动的项目(未选择的项目)。
我想用 ListBox 构造 xaml,其中激活的项目有另一种颜色。我该怎么做?

具体来说,在 xaml 中,我有:

<Grid DataContext="ModelView">
    <ListBox ItemsSource="Questions">
        <ListBox.ItemTemplate>           
            <TextBlock Text="{Binding ID}" />
            <TextBlock Text="{Binding Text}" />           
        </ListBox.ItemTemplate>
    </ListBox>
    <TextBlock Text="{Binding ID}" />
</Grid>`

如何根据 ModelView 中的属性 ID 设置列表框中一个(且只有一个)项的颜色?

还有一个问题 - 当我更改活动项时 - 如何刷新 ListBox?

【问题讨论】:

  • 对不起,如果只有我 - 但我不确定要求是什么。
  • 这个 xaml 只是一个简化的例子。我找到了解决方案,但不喜欢它 - 我必须使用布尔属性 IsActivated 和静态属性 ViewModel 扩展项目。 IsActivated 将当前项目的 ID 与活动项目的 ID 进行比较。

标签: silverlight data-binding mvvm listbox


【解决方案1】:

我在 xaml: <Grid DataContext="ModelView"> <ListBox ItemsSource="Questions"> <ListBox.ItemTemplate>
<TextBlock Text="{Binding ID}" /> <TextBlock Text="{Binding Text}" />
</ListBox.ItemTemplate> </ListBox> <TextBlock Text="{Binding ID}" /> </Grid>

如何根据 ModelView 中的属性 ID 为列表框中的一个(且只有一个)项目设置颜色?

【讨论】:

  • @Gabriel:这类附加信息属于问题部分。我继续并在那里添加了它。我建议您删除此答案,以提高获得正确回复的机会。
【解决方案2】:

顺便说一句,您的 ItemTemplate 似乎无效。 !

我会尝试使用触发器来模板化您突出显示的列表框项

例如,在一个网格中我做了这个

 <DataTemplate>
     <Image x:Name="MyImage" Source="Images/corrected.png" Width="64" Height="64" />
     <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding YourConditionValue}" Value="0">
            <Setter TargetName="MyImage" Property="Source" Value="Images/notCorrected.png" />
         </DataTrigger>
      </DataTemplate.Triggers>
  </DataTemplate>

这可能是一个解决方案,但您需要自己检查一下

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 2012-10-08
    • 2010-11-23
    相关资源
    最近更新 更多