WPFListViewとMVVMがあります。ListViewは、単純な親子構造の一部です。親はListViewコントロールでもあります。親コントロールで選択したアイテムを変更すると、子コントロールのItemsSourceが更新されます。たとえば、最初のItemsSourceでアイテムの最長のテキストに5文字が含まれている場合、ItemsSourceを変更すると、すべてのアイテムのテキストが最大5文字で表示されます(新しいItemsSourceで)。この問題を無効にするにはどうすればよいですか?
コード例:
<ListView Grid.Row="0" Grid.Column="3" ItemsSource="{Binding Tasks}" Width="200" Height="250" VerticalAlignment="Bottom" SelectionMode="Extended">
<ListView.View>
<GridView>
<GridView.ColumnHeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Visibility" Value="Collapsed"/>
</Style>
</GridView.ColumnHeaderContainerStyle>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
</GridView>
</ListView.View>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource {x:Type ListViewItem}}">
<Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
私はBureauBlueテーマを使用していますが、とにかくそれを使用しない場合、同じ問題が発生します。
ViewModelのコードの一部:
private void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "CurrentParentItem")
{
if (this.CurrentParentItem != null)
{
this.Tasks = GetTasks();//ObservableCollection
}
else
{
this.Tasks = null;
}
}
}