【发布时间】:2012-05-28 15:59:59
【问题描述】:
我目前有一个Entity,上面有一个集合属性。我想知道为什么SelectionChanged 只会触发一次并且一旦我尝试选择之前选择的项目就不会再次触发SelectionChanged。
MainWindowViewModel
public MainWindowViewModel()
{
var a = new List<Test>();
a.Add(new Test() { Name = "Leo", Test1 = new List<Test1> { new Test1() { Content = "aaa"} } });
a.Add(new Test() { Name = "2", Test1 = new List<Test1> { new Test1() { Content = "bbb"} } });
a.Add(new Test() { Name = "Le33o", Test1 = new List<Test1> { new Test1() { Content = "ccc"} } });
A = a;
}
private List<Test> _a;
public List<Test> A
{
get { return _a; }
set { _a = value; OnPropertyChanged("A");}
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
public event PropertyChangedEventHandler PropertyChanged;
我的主窗口
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowViewModel();
}
private void Test(object sender, SelectionChangedEventArgs e)
{
}
我的列表框结构
public class Test
{
public List<Test1> Test1 { get; set; }
public string Name
{
get;set;
}
}
public class Test1
{
public string Content { get; set; }
}
我选择第一个对象,事件触发,我选择第二个对象,事件触发,我选择第一个对象,事件不触发,我选择第三个对象,事件触发。似乎它只触发和调用一次事件。
我的XAML代码:
<ItemsControl x:Name="Lists" ItemsSource="{Binding A}" Grid.Row="1">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}" FontWeight="Bold"
Style="{StaticResource DefaultTextBlockStyle}" />
<ListBox SelectionChanged="Test" ItemsSource="{Binding Test1}"
Margin="5,0,0,0" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Content}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
测试方法只是一个空方法我只想每次更改都打断点。
private void Test(object sender, SelectionChangedEventArgs e)
{
}
更新 1:我试图在一个简单的 WPF 应用程序中重现这一点,似乎 ListBoxItem 将 IsEnabled 设置为 false,但我窥探了它并且所有控件都已启用。它只是得到一个看起来像禁用的灰色背景。将尝试进一步调查。
更新 2:当您更改项目时,似乎没有取消设置 ListBoxItem IsSelected 属性。
【问题讨论】:
-
我不明白 c# 代码与 XAML 的关系。您可能想要更精确。
-
给了你实体的结构,这就是为什么我在那里有 C# 代码,xaml 是我绑定它的方式。它触发良好,我尝试用不同的正常实体重现它,它的行为相同。
-
您应该发布您的方法“测试”的代码。我很难相信这种方法不会在您描述的情况下运行。您可能没有得到您期望的结果,但这可能是因为方法的逻辑存在缺陷。您是否尝试在“测试”中设置断点?
-
是的,我不需要为 Test 放置方法,因为它只是空方法,我只想让它触发。我确实设置了一个断点。
-
@DisplayNameismissing 我知道这是一篇很老的帖子,但不适合我回答你的问题?