我创建了一个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),则Static
和Couple
根本不会显示。
答案 0 :(得分:0)
如果此视图为ReadOnly,只需在插入之前检查该值是否已存在。
if(ToleranceTable.Count(el => el.Name == prop.Name) == 0){
ToleranceTable.Add(...)
}
无论如何,问题不在于ListView。 WPF中的任何控件都将准确显示它在ItemsSource中的存在。 如果您不想显示Items,请不要将它们添加到ObservableCollection中,或者(但我个人不建议您这样做),在Model中添加一个属性,并将itemtemplate可见性绑定到该属性。