Это зависит от того, как вы меняете количество строк и меток.
Я предполагаю, что MyObject
- это List<MyObject>
.В этом случае вы можете просто связать список со свойством Visibility
с помощью Converter
, который просматривает объекты, проверяя, все ли они невидимы.
XAML:
Пространство имен:
xmlns:converters="clr-namespace:MyConverters"
Окно:
<Window.Resources>
<converters:ObjectBorderVisibilityConverter
x:Key="MyObjectBorderVisibilityConverter"/>
</Window.Resources>
<Border BorderBrush=Black
BorderThickness="{Binding MyObject, Converter={StaticResource MyObjectBorderVisibilityConverter}">
[...]
Код конвертера:
namespace MyConverters
{
public class ObjectBorderVisibilityConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Visibility v = Visibility.Hidden;
List<MyObject> myObjects = value as List<MyObject>;
foreach(Object myobject in myObjects)
{
if (myobject.IsVisible)
v = Visibility.Visible;
}
return v;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new InvalidOperationException("ObjectBorderVisibilityConvertercan only be used OneWay.");
}
}
}
В противном случае вам придется объяснить, как вы получили количество строк и метокбыть динамичным, и мы можем работать оттуда.
Надеюсь, это поможет
u_u
РЕДАКТИРОВАТЬ
Ну, согласно вашему комментарию у вас естьсписок строк, которые содержат название объекта, который вы хотите отобразить в каждом ListViewItem
.Я не собираюсь спрашивать, почему вы делаете это таким образом, я полагаю, у вас есть причина.Я просто хочу сказать, пробовали ли вы пары Key Value?
Что я хотел бы сделать, так это передать саму сетку в качестве параметра в преобразователе и перебрать ее дочерние элементы, используя LogicalTreeHelper внутриконвертер.
Пересмотренная граница:
<Window.Resources>
<converters:ObjectBorderVisibilityConverter
x:Key="MyObjectBorderVisibilityConverter"/>
</Window.Resources>
<Border BorderBrush=Black
BorderThickness="{Binding MyObject, Converter={StaticResource MyObjectBorderVisibilityConverter}", ConverterParameter={Binding ElementName=myGrid, BindsDirectlyToSource=True>
<Grid x:Name="myGrid">
[...]
Пересмотренный конвертер
namespace MyConverters
{
public class ObjectBorderVisibilityConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Visibility v = Visibility.Hidden;
Grid myGrid = parameter as Grid;
List<MyObject> myObjects = value as List<MyObject>;
foreach (var child in LogicalTreeHelper.GetChildren(myGrid))
{
if(child.GetType() == typeof(System.Windows.Controls.Label)
if (((Label)child).Visibility = Visibility.Visible)
v = Visibility.Visible;
}
return v;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new InvalidOperationException("ObjectBorderVisibilityConvertercan only be used OneWay.");
}
}
}
Я все это кодировал вручную, так что есть куча ошибок, но я надеюсь, что вы получитеточка.
u_u