繁体   English   中英

WPF DataGridCell样式绑定问题

[英]WPF DataGridCell Style binding issue

我在将Collection绑定到DataGrid时遇到一个奇怪的问题,在该行上选择行时,绑定似乎消失了(我有一个空单元格)

这是我的物品清单

public ReadOnlyCollection<ItemPoint> CurrentItemPoints { get; private set; }

ItemPoint对象定义为:

public sealed class ItemPoint : PropertyChangedNotifierBase
{        
    private bool _IsSubscribed = false;
    private string _Name = string.Empty;
    private string _Value = string.Empty;
    private DateTime _ValueTime = DateTime.UtcNow;

    public bool IsSubscribed
    {
        get { return _IsSubscribed; }
        set
        {
            if (_IsSubscribed != value)
                ChangeSubscription(value);
            ChangeProperty("IsSubscribed", ref _IsSubscribed, value);
        }
    }

    public string Name
    {
        get { return _Name; }
        private set
        {
            ChangeProperty("Name", ref _Name, value);
        }
    }

    public string Value
    {
        get { return _Value; }
        set
        {
            _Value = value;
        }
    }

    public DateTime ValueTime
    {
        get { return _ValueTime; }
        private set
        {
            ChangeProperty("ValueTime", ref _ValueTime, value);
        }
    }
}

这是我的xaml:

    <DataGrid Name="PointsList" VerticalAlignment="Stretch"  HorizontalAlignment="Stretch" Margin="2,0,0,0"
              ItemsSource="{Binding CurrentItemPoints, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridCheckBoxColumn Binding="{Binding Path=IsSubscribed, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"  Width="10">
                <DataGridCheckBoxColumn.CellStyle>
                    <Style>
                        <EventSetter Event="CheckBox.Checked" Handler="SubscriptionCheckBox_Checked"/>
                    </Style>
                </DataGridCheckBoxColumn.CellStyle>
            </DataGridCheckBoxColumn>
            <DataGridTextColumn Binding="{Binding Name, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" Header="Name"  Width="*"/>
            <DataGridTextColumn Binding="{Binding Value, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, IsAsync=True, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}"  Header="WorkingValueColumn" Width="*"/>
            <DataGridTextColumn  Binding="{Binding Value, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, IsAsync=True, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}"  Header="NonWorkingValueColumn" Width="*">
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="{x:Type DataGridCell}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type DataGridCell}">
                                    <ContentPresenter/>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>
            <DataGridTextColumn Binding="{Binding Path=ValueTime, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True, Mode=OneWay, StringFormat='{}{0:dd-MM-yyyy HH:mm:ss.fff}'}" Header="Time"  Width="*">
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>

如果现在显示数据网格,则一切正常……直到选择网格的任何单元格。

这样做,我将使“ WorkingValueColumn”正常运行...这意味着将继续显示选定的项目值,而“ NonWorkingValueColumn”将显示一个空单元格...

这是部分datagrid的屏幕截图: 带有选择单元格的Datagrid

我一直在找一阵子,却没有发现任何重复。尽管我可能会错过一些选择模板或类似的东西,但我真的不知道。

谢谢你的帮助!

最后,我可以解决通过DataTemplateColumn更改DataTextColumn的奇怪行为:

<DataGridTemplateColumn Header="Value">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                       <TextBlock Text="{Binding Value, UpdateSourceTrigger=PropertyChanged, Mode=OneWay, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}" HorizontalAlignment="Stretch"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding Value, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}" BorderThickness="0" HorizontalAlignment="Stretch"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM