首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定属性到CustomDataTemplate

绑定属性到CustomDataTemplate
EN

Stack Overflow用户
提问于 2012-07-23 11:08:51
回答 1查看 129关注 0票数 0

我有一份物品清单

代码语言:javascript
复制
public List<Item> MyItems { get; set; }

显示在DataGrid上。一列显示由模板定义的状态“图标”。代码看起来是这样的:

列模板..。

代码语言:javascript
复制
<DataGridTemplateColumn Header="Status">
  <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
      <Grid Height="18" Width="35">
        <Rectangle Fill="{Binding Status.Background}" />
        <TextBlock Text="{Binding Status.Text}" />
      </Grid>   
    </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>    
</DataGridTemplateColumn>

数据模型..。

代码语言:javascript
复制
public class Item
{
    public int ItemId { get; set; }
    public string Name { get; set; }
    public int StatusId { get; set; } 
    public Status Status { get; set; }
}
public class Status
{
    public int StatusId { get; set; }
    public int Text { get; set; }

    public Brush Background
    {
      get
      {
         //Colour logic goes here
      }
    }
}

我想从数据模型中删除颜色逻辑,并将其放到资源文件中。

代码语言:javascript
复制
<DataGridTemplateColumn Header="Status" CellTemplate="{StaticResource MyCustomTemplate}" </DataGridTemplateColumn>

我希望到目前为止,我将朝着正确的方向前进,但此时我迷失了方向,因为我不知道如何将Status属性(或StatusId)绑定到MyCustomTemplate。

如果有人能帮我的忙,那就太好了。

编辑

这个很好用。

代码语言:javascript
复制
<DataGridTemplateColumn Header="V" Width="25" IsReadOnly="True" >
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <ic:CloseIcon  Visibility="{Binding DockStatus, Converter={StaticResource CloseIconDisplayVisibilityConverter}}" />
                <ic:DockIcon Visibility="{Binding DockStatus, Converter={StaticResource DockIconDisplayVisibilityConverter}}" />
                <ic:UndockIcon Visibility="{Binding DockStatus, Converter={StaticResource UndockIconDisplayVisibilityConverter}}" />
            </StackPanel>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

当模型更改时,这不会刷新UI (DockStatus更改)

代码语言:javascript
复制
<DataGridTemplateColumn Header="V" Width="25" IsReadOnly="True" CellEditingTemplateSelector="{StaticResource DockIconCellTemplateSelector}}">
EN

回答 1

Stack Overflow用户

发布于 2012-07-23 11:29:12

如果只选择特定项目的适当背景颜色,或使用特定StatusId的项目,则可以编写绑定转换器。该转换器将简单地将int转换为Brush

代码语言:javascript
复制
[ValueConversion(typeof(int), typeof(Brush))]
public class StatusColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is int)
        {
            int statusId = (int)value;
            // create Brush from id here and return it
        }

        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

您可以这样修改您的绑定:

代码语言:javascript
复制
<Rectangle Fill="{Binding Status.StatusId, Converter={StaticResource StatusColorConverter}}" /> 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11611326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档