为什么我的Listview多次显示相同的值?

时间:2019-11-12 10:07:17

标签: c# wpf listview

我创建了一个Listview来显示“静态”和“耦合”值。只能有 根据用户在另一个视图中的输入,显示每个。比Listview有更好的解决方案吗?

我尝试将Itemssource绑定到Listview,然后在应该显示值的文本块上使用Binding Path=binding,但确实如此。但是,由于存在3个对象,因此它会显示3次相同的值,而只能显示一次。

这是ViewModel中的代码。

private async void LoadToleranceTableValues(int jobRunId)
        {
            var tolerances = await _testRunApi.GetTestRunLiveValue(jobRunId);

            if (tolerances != null)
            {
                ToleranceTable = new ObservableCollection<ToleranceTableInfo>();
                foreach (var prop in tolerances.ListBalancePlaneTolerance)
                {
                    ToleranceTable.Add(new ToleranceTableInfo
                    {
                        Name = prop.Name,
                        WeightInUnit = prop.Tolerance.ToString() + " " + prop.ToleranceUnit,
                        StaticTolerance = tolerances.StaticTolerance,
                        DynamicTolerance = tolerances.DynamicTolerance
                    });
                }
            }
        }

这是Xaml中的列表视图

<ListView BorderThickness="1"
                           Grid.Row="2"
                           Grid.Column="0"
                           Margin="0"
                           ItemsSource="{Binding ToleranceTable}">
                        <ListView.ItemsPanel>
                            <ItemsPanelTemplate>
                                <StackPanel Orientation="Vertical"/>
                            </ItemsPanelTemplate>
                        </ListView.ItemsPanel>
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition/>
                                        <RowDefinition/>
                                    </Grid.RowDefinitions>
                                    <TextBlock Text="Static"
                                               Grid.Row="0"
                                               Grid.Column="0"
                                               MinHeight="20"/>
                                    <TextBlock Text="Dynamic"
                                               Grid.Row="1"
                                               Grid.Column="0"
                                               MinHeight="20"/>
                                    <TextBlock Text="{Binding Path=StaticTolerance}"
                                               Grid.Column="1"
                                               TextAlignment="Right"
                                               Margin="0 0 0 0"
                                               MinHeight="20"/>
                                    <TextBlock Text="{Binding Path=DynamicTolerance}"
                                               Grid.Column="1"
                                               Grid.Row="1"
                                               TextAlignment="Right"
                                               Margin="0 0 0 0"
                                               MinHeight="20"/>
                                </Grid>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>

我希望显示每个对象中的一个。但是目前它显示3个对象,所有对象都具有相同的值。我认为这是因为prop中有3个对象。如果没有值(或0.0),则StaticCouple根本不会显示。

1 个答案:

答案 0 :(得分:0)

如果此视图为ReadOnly,只需在插入之前检查该值是否已存在。

if(ToleranceTable.Count(el => el.Name == prop.Name) == 0){
 ToleranceTable.Add(...)
}

无论如何,问题不在于ListView。 WPF中的任何控件都将准确显示它在ItemsSource中的存在。 如果您不想显示Items,请不要将它们添加到ObservableCollection中,或者(但我个人不建议您这样做),在Model中添加一个属性,并将itemtemplate可见性绑定到该属性。