我有一个对象列表,我在ListView上显示。现在我想根据ViewModel中的值更改ListViewItem的Margin属性。
现在,每当我运行代码时,我都会收到以下错误: - "异常目标sp1未定义任何VisualStateGroups。"
我不知道我做错了什么。任何帮助将受到高度赞赏
请在下面找到我的代码段: -
XAML(请关注扩展和折叠状态): - `
<UserControl.DataContext>
<vm:BasketUserControlViewModel/>
</UserControl.DataContext>
<UserControl.Resources>
</UserControl.Resources>
<!-- Page content -->
<Grid x:Name="ContentGrid" Width="400" Height="600">
<ListView
x:Name="BasketListView"
Width="400"
Height="Auto"
ItemsSource="{Binding Nodes}"
SelectionMode="None"
IsItemClickEnabled="True">
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="ItemClick">
<core:InvokeCommandAction Command="{Binding NavigateToChild}"/>
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
<ListView.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Content="Back" HorizontalAlignment="Left" Command="{Binding NavigateToParent}" CommandParameter="{Binding Items, ElementName=BasketListView}"/>
<Button Content="Expand" HorizontalAlignment="Right" Command="{Binding ExpandBasketEntry}" CommandParameter="{Binding Items, ElementName=BasketListView}">
</Button>
</StackPanel>
</DataTemplate>
</ListView.HeaderTemplate>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel x:Name="sp1" Orientation="Horizontal" Margin="20,0,10,0" Background="Black">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="Test">
<VisualState x:Name="Expanded">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Margin" Storyboard.TargetName="sp1">
<DiscreteObjectKeyFrame KeyTime="0" Value="{Binding Level, Converter={StaticResource basketMarginCnverter}}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Collapsed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Margin" Storyboard.TargetName="sp1">
<DiscreteObjectKeyFrame KeyTime="0" Value="0,0,0,0"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<TextBlock Text="{Binding Title}" HorizontalAlignment="Left"/>
<Button HorizontalAlignment="Right">
<Image Source="ms-appx:///Assets/RightArrow.jpg" Width="10" Height="10"></Image>
</Button>
<interactivity:Interaction.Behaviors>
<core:DataTriggerBehavior Binding="{Binding ElementName=ContentGrid, Path=DataContext.IsExpandedBasket}" Value="True">
<core:GoToStateAction StateName="Expanded"/>
</core:DataTriggerBehavior>
<core:DataTriggerBehavior Binding="{Binding ElementName=ContentGrid, Path=DataContext.IsExpandedBasket}" Value="False">
<core:GoToStateAction StateName="Collapsed"/>
</core:DataTriggerBehavior>
</interactivity:Interaction.Behaviors>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
`
ViewModel: -
public class BasketUserControlViewModel : ViewModel
{
private INavigationService _navigationService;
private ObservableCollection<BasketEntryModel> _nodes;
private List<BasketEntryModel> _basketEntryList;
public ICommand ExpandBasketEntry { get; private set; }
public ICommand NavigateToChild { get; private set; }
public ICommand NavigateToParent { get; private set; }
private bool _isExpandedBasket;
public bool IsExpandedBasket
{
get { return _isExpandedBasket; }
set
{
base.SetProperty(ref this._isExpandedBasket, value);
}
}
public BasketUserControlViewModel()
{
_nodes = new ObservableCollection<BasketEntryModel>();
_basketEntryList = new List<BasketEntryModel>();
BasketEntryModel parent1 = new BasketEntryModel();
parent1.Title = "Parent 1";
parent1.BasketID = 1;
parent1.Level = 1;
List<BasketEntryModel> parent1Childs = new List<BasketEntryModel>();
BasketEntryModel parent1Child1 = new BasketEntryModel();
parent1Child1.Title = "Parent 1 Child 1";
parent1Child1.BasketID = 5;
parent1Child1.Level = 2;
BasketEntryModel parent1Child2 = new BasketEntryModel();
parent1Child2.Title = "Parent 1 Child 2";
parent1Child2.BasketID = 6;
parent1Child2.Level = 2;
BasketEntryModel parent1Child3 = new BasketEntryModel();
parent1Child3.Title = "Parent 1 Child 3";
parent1Child3.BasketID = 7;
parent1Child3.Level = 2;
BasketEntryModel parent1Child4 = new BasketEntryModel();
parent1Child4.Title = "Parent 1 Child 4";
parent1Child4.BasketID = 8;
parent1Child4.Level = 2;
parent1Childs.Add(parent1Child1);
parent1Childs.Add(parent1Child2);
parent1Childs.Add(parent1Child3);
parent1Childs.Add(parent1Child4);
parent1.Childs = parent1Childs;
List<BasketEntryModel> parent1Child1Childs = new List<BasketEntryModel>();
BasketEntryModel parent1Child41 = new BasketEntryModel();
parent1Child41.Title = "Parent 1 Child 41";
parent1Child41.BasketID = 8;
parent1Child41.Level = 3;
BasketEntryModel parent1Child42 = new BasketEntryModel();
parent1Child42.Title = "Parent 1 Child 42";
parent1Child42.BasketID = 8;
parent1Child42.Level = 3;
BasketEntryModel parent1Child43 = new BasketEntryModel();
parent1Child43.Title = "Parent 1 Child 43";
parent1Child43.BasketID = 8;
parent1Child43.Level = 3;
BasketEntryModel parent1Child44 = new BasketEntryModel();
parent1Child44.Title = "Parent 1 Child 44";
parent1Child44.BasketID = 8;
parent1Child44.Level = 3;
BasketEntryModel parent1Child45 = new BasketEntryModel();
parent1Child45.Title = "Parent 1 Child 45";
parent1Child45.BasketID = 8;
parent1Child45.Level = 3;
parent1Child1Childs.Add(parent1Child41);
parent1Child1Childs.Add(parent1Child42);
parent1Child1Childs.Add(parent1Child43);
parent1Child1Childs.Add(parent1Child44);
parent1Child1Childs.Add(parent1Child45);
parent1Child4.Childs = parent1Child1Childs;
BasketEntryModel parent2 = new BasketEntryModel();
parent2.Title = "Parent 2";
parent2.BasketID = 2;
parent2.Level = 1;
BasketEntryModel parent3 = new BasketEntryModel();
parent3.Title = "Parent 3";
parent3.BasketID = 3;
parent3.Level = 1;
BasketEntryModel parent4 = new BasketEntryModel();
parent4.Title = "Parent 4";
parent4.BasketID = 4;
parent4.Level = 1;
_basketEntryList.Add(parent1);
_basketEntryList.Add(parent2);
_basketEntryList.Add(parent3);
_basketEntryList.Add(parent4);
_nodes = new ObservableCollection<BasketEntryModel>(_basketEntryList);
NavigateToChild = new DelegateCommand<object>(GetChildBasketEntryData);
NavigateToParent = new DelegateCommand<object>(GetParentBasketEntryData);
ExpandBasketEntry = new DelegateCommand<object>(ExpandBasketEntryData);
}
public BasketUserControlViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
}
public ObservableCollection<BasketEntryModel> Nodes
{
get
{
return _nodes;
}
set
{
base.SetProperty(ref this._nodes, value);
}
}
private void GetChildBasketEntryData(object parameter)
{
try
{
var basketEntry = ((ItemClickEventArgs)parameter).ClickedItem as BasketEntryModel;
Nodes = new ObservableCollection<BasketEntryModel>(basketEntry.Childs);
}
catch (Exception e)
{
Debug.WriteLine("Exception " + e.Message);
}
}
private void GetParentBasketEntryData(object parameter)
{
try
{
ItemCollection itemCollection = (ItemCollection)parameter;
BasketEntryModel basketEntry = (BasketEntryModel)itemCollection.FirstOrDefault();
if (basketEntry != null)
{
List<BasketEntryModel> _flattenList = _basketEntryList.FlatList();
var previousLevel = basketEntry.Level - 1;
if (previousLevel != 0)
{
List<BasketEntryModel> _parentList = (from o in _flattenList where o.Level == previousLevel select o).ToList();
Nodes = new ObservableCollection<BasketEntryModel>(_parentList);
}
}
}
catch (Exception e)
{
Debug.WriteLine("Exception " + e.Message);
}
}
private void ExpandBasketEntryData(object parameter)
{
try
{
ItemCollection itemCollection = (ItemCollection)parameter;
List<BasketEntryModel> _currentBasketEntries = itemCollection.Cast<BasketEntryModel>().ToList<BasketEntryModel>();
if (_currentBasketEntries != null && _currentBasketEntries.Count > 0)
{
List<BasketEntryModel> _flattenList = _currentBasketEntries.FlatList();
if (_flattenList != null && _flattenList.Count > 0)
{
Nodes = new ObservableCollection<BasketEntryModel>(_flattenList);
IsExpandedBasket = true;
}
}
}
catch (Exception e)
{
Debug.WriteLine("Exception " + e.Message);
}
}
}
感谢和问候, 萨姆