【问题标题】:Binding to Property and ItemSource with DataGrid使用 DataGrid 绑定到 Property 和 ItemSource
【发布时间】:2012-11-25 19:32:06
【问题描述】:

我有一个 DataGrid,它当前有一个 ItemsSource="{Binding Events}",在我需要绑定到不属于 ItemsSource="{Binding Events}" 的属性 (OccurredOnLocal) 的列中。我该怎么做?

EventHistoryView.xaml

<sdk:DataGrid x:Name="dataGrid" Grid.Row="3" Margin="5,5" ItemsSource="{Binding Events}"  IsReadOnly="True" AutoGenerateColumns="False" IsEnabled="{Binding DataIsCurrent}">
        <i:Interaction.Behaviors>
            <behaviors:DataGridDoubleClickBehavior DoubleClickCommand="{Binding DoubleClickCommand}" CommandParameter="{Binding SelectedItem, ElementName=dataGrid}"/>
        </i:Interaction.Behaviors>
        <sdk:DataGrid.Columns>
            <sdk:DataGridTextColumn Header="Priority" Binding="{Binding Priority}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="auto"/>
            <sdk:DataGridCheckBoxColumn Header="Requires Ack" Binding="{Binding RequiresAcknowledgement}" Width="auto"/>
            <sdk:DataGridTextColumn Header="Occurred On" Binding="{Binding MessageTime}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="*"/>
            <sdk:DataGridTextColumn Header="Occurred On (Local)" Binding="{Binding OccurredOnLocal}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="*"/>
            <sdk:DataGridTemplateColumn Header="Alarm" Width="*">
                <sdk:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Border Background="{Binding DisplayColour}">
                            <TextBlock Text="{Binding EventDisplayText}" VerticalAlignment="Center"/>
                        </Border>
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellTemplate>
            </sdk:DataGridTemplateColumn>
            <sdk:DataGridTextColumn Header="Controller" Binding="{Binding ControllerDisplayText}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="*"/>
            <sdk:DataGridTextColumn Header="Reader" Binding="{Binding ReaderDisplayText}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="*"/>
            <sdk:DataGridTextColumn Header="Card Number" Binding="{Binding BadgeId}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="auto"/>
            <sdk:DataGridTextColumn Header="Person" Binding="{Binding PersonDisplayText}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="*"/>
        </sdk:DataGrid.Columns>
    </sdk:DataGrid>

EventHistoryViewModel.cs

    #region OccurredOnLocal Property
    /// <summary>
    /// The <see cref="OccurredOnLocal" /> property's name.
    /// </summary>
    public const string OccurredOnLocalPropertyName = "OccurredOnLocal";

   private TimeZoneInfo occurredOnLocal = TimeZoneInfo.Local;

    /// <summary>
    /// Gets the OccurredOnLocal property.
    /// TODO Update documentation:
    /// Changes to that property's value raise the PropertyChanged event. 
    /// This property's value is broadcasted by the Messenger's default instance when it changes.
    /// </summary>
    public TimeZoneInfo OccurredOnLocal
    {
        get
        {
            return occurredOnLocal;
        }

        set
        {
            if (occurredOnLocal == value)
            {
                return;
            }

            occurredOnLocal = value;

            RaisePropertyChanged(OccurredOnLocalPropertyName);
        }
    }
    #endregion

谢谢,
杰森

【问题讨论】:

    标签: c# silverlight xaml binding


    【解决方案1】:

    你可以使用RelativeSource xaml 扩展

    <sdk:DataGridTextColumn Header="Occurred On (Local)" Binding="{Binding DataContext.OccurredOnLocal, RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 2012-08-10
      • 2019-10-11
      • 2021-08-15
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      相关资源
      最近更新 更多