Пожалуйста, обратите внимание на данные Label
, размер которых не изменяется при загрузке.Это работает впоследствии, когда вы выбираете различные элементы в ListView
(но они должны иметь разную длину!).
Определение «изменения размера»: как правило, метка автоматически подстраивает свою ширину под размер содержимого.В моем подвиге этого не происходит.Контент обрезается.
Конечно, это должно быть s.е.что связано с тем, что я реализовал механизм автоматического выбора через выделенное свойство AutoSelect
из Item
.
Как я могу решить эту проблему, сохранив логику автоматического выбора?Пожалуйста, дайте возможность множественного выбора из уравнения, так как это не относится к этой проблеме.
Просмотр:
<Window x:Class="TestApp___WPF_ListView.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TestApp___WPF_ListView"
mc:Ignorable="d"
Title="MainWindow" Height="300" Width="300">
<Window.DataContext>
<local:ViewModel />
</Window.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0 10">
<Label Content="{Binding SelectedItemName}" BorderBrush="Red" BorderThickness="1" />
<Label Content="Other Text" />
</StackPanel>
<ListView Grid.Row="1" Grid.Column="0" Name="listview" ItemsSource="{Binding TvItems}" SelectedItem="{Binding SelectedItem}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="IsSelected" Value="{Binding AutoSelect}" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
</Grid>
</Window>
ViewModel:
using System.Collections.ObjectModel;
using System.ComponentModel;
namespace TestApp___WPF_ListView
{
public class ViewModel : INotifyPropertyChanged
{
private Item m_SelectedItem = null;
public event PropertyChangedEventHandler PropertyChanged;
protected void DoPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public ObservableCollection<Item> Items { get; }
public Item SelectedItem
{
get
{
return m_SelectedItem;
}
set
{
m_SelectedItem = value;
DoPropertyChanged("SelectedItem");
DoPropertyChanged("SelectedItemName");
}
}
public string SelectedItemName { get { return m_SelectedItem?.Name ?? "null"; }
}
public ViewModel()
{
Items = new ObservableCollection<Item>();
Items.Add(new Item("Item #1 asölkasd", false));
Items.Add(new Item("Item #2 as", false));
Items.Add(new Item("Item #3 asdköwowfialöafl", false));
Items.Add(new Item("Item #4 akksad", true));
Items.Add(new Item("Item #5 aöasölskfawelllkasdlk", false));
Items.Add(new Item("Item #6 aslsdkföwl", false));
}
}
}
Элемент данных:
namespace TestApp___WPF_ListView
{
public class Item
{
public string Name { get; set; }
public bool AutoSelect { get; set; }
public Item(string p_Name, bool p_AutoSelect)
{
Name = p_Name;
AutoSelect = p_AutoSelect;
}
}
}
Конечно, мне понадобилось несколько часов, чтобы определить эту основную причинупроблема вне реального бизнес-приложения ...; -)