我有2 ListView
个,两个都有相同的项目。我想要做的是,当在一个ListView
中进行选择时,相同的选择也应该反映在另一个ListView
中。两个ListViews
绑定到两个不同的ViewModel,但ViewModel都实现了相同的接口。
我已经覆盖了两个ViewModels中的Equals
方法。
两个ListView
位于不同的XAML页面上。第一个ListView
说LV1
在Page1.xaml中,LV2
在Page2.xaml中。我想要的是,当我在LV2
中更改选择时,LV1
中的选择也应该更改(仅限单向)。我在x:FieldModifier="public"
上设置LV1
并通过Page1的静态属性公开,如下所示:
public sealed partial class Page1 : Page
{
public static Page1 page1 { get; private set; }
}
在第2页,我有这个:
private async void LV2_ItemClick(object sender, ItemClickEventArgs e)
{
var selected = e.ClickedItem as ISomeCommonInterface;
//Comparision is successful --> Contains() always returns corect value;
if (Page1.page1.LV1.Items.ToList().Contains(selected))
{
Page1.page1.LV1.SelectedItem = null; // this works
Page1.page1.LV1.SelectedItem = selected; // this doesn't work
}
}
我发现在if
条件中,赋值为null会将SelectedItem
的{{1}}更改为null,但下一行不会将其更改为LV1
(它仍然是空的。)
答案 0 :(得分:0)
分配后添加:
var trackOutboundLink = function(url) {
ga('send', 'event', 'outbound', 'click', url, {
'transport': 'beacon',
'hitCallback': function() {
document.location = url;
}
});
}
答案 1 :(得分:0)
这对我有用:
LV2
在SelectedItem
中获取JSON
的{{1}}索引的方法可能更简单,但这足以让您走上正确的轨道。
您可以查看我创建的minimal testing app,其中显示JSON
也有效。
答案 2 :(得分:0)
SelectionMode="Multiple"
- 两个ListViews同步您应该在两个ListView上订阅SelectionChanged
事件 - 只有通过点击才能选择项目 - 并且(当选择更改时)您应该同步选择。
private void SyncSelection(object sender, SelectionChangedEventArgs e)
{
ListView listViewToAdd = ReferenceEquals(sender, firstListView) ? secondListView : firstListView;
foreach (var item in e.AddedItems)
{
if (!listViewToAdd.SelectedItems.Contains(item))
{
listViewToAdd.SelectedItems.Add(item);
}
}
foreach (var item in e.RemovedItems)
{
listViewToAdd.SelectedItems.Remove(item);
}
}
SelectionMode="Multiple"
- 在另一个您应该只在可以选择项目的ListView上订阅SelectionChanged
事件。
private void SyncSelection(object sender, SelectionChangedEventArgs e)
{
foreach (var item in e.AddedItems)
{
secondListView.SelectedItems.Add(item);
}
foreach (var item in e.RemovedItems)
{
secondListView.SelectedItems.Remove(item);
}
}
SelectionMode="Single"
如果您想要使SelectionChanged
事件同步,或仅在可选择的事件上订阅private void SyncSelection(object sender, SelectionChangedEventArgs e)
{
ListView senderListView = (ListView)sender;
ListView listViewToAdd = ReferenceEquals(sender, firstListView) ? secondListView : firstListView;
listViewToAdd.SelectedItem = senderListView.SelectedItem;
}
事件,如果您只想根据第一个事件更新第二个事件。
var
您可能需要将def f1(self, filepointer):
for _, line in zip(range(100), filepointer):
# do stuff with the line
def f0(self, filename):
with open(filename) as infile:
for lineContent in infile:
if re.match(lineContent):
f1(infile) # only works because of the way file iterators are set up. Otherwise, that for-loop's scoping iterator will bork you here
# that continue is unnecessary here
else:
# do other stuff while parsing lines
替换为您的界面才能使其正常工作。