清除ListView后,ListView SelectedItem不更新UI

时间:2013-04-18 16:34:15

标签: c# windows-store-apps winrt-xaml caliburn.micro

我在Windows应用商店应用中使用Caliburn Micro。

我有一个ListView,它有一个在我第一次使用时工作的SelectedItem。但是,当我清除ListView并将其重新绑定到另一个Collection时,所选项目不再显示为已选中。

正确设置了selectedItem属性,因为我可以点击断点,并且一切正常,只有在我清除集合后,才会使用所选项目更新View。

可能出现什么问题?

感谢。

编辑:

查看代码:

<ListView x:Name="DetailNotes"
          ItemsSource="{Binding DetailNotes}"
          SelectedItem="{Binding SelectedDetailNote}"                                  
          ItemTemplate="{StaticResource Notes600ItemTemplate}"
          IsItemClickEnabled="True"
          caliburn:Message.Attach="[Event ItemClick] = [DetailNoteSelected($eventArgs)]"/>

ViewModel代码:

(...)
private Note selectedDetailNote;

public Note SelectedDetailNote
{
    get { return this.selectedDetailNote; }
    set 
    { 
        this.selectedDetailNote = value; 
        this.NotifyOfPropertyChange(() => this.SelectedDetailNote); 
    }
}

(...)

public void DetailNoteSelected(ItemClickEventArgs eventArgs)
{
    Note n = (Note)eventArgs.ClickedItem;
    this.SelectedDetailNote = n;
}

2 个答案:

答案 0 :(得分:0)

抱歉!问题是我明确的约束力。我刚离开Caliburn做他的工作,现在它有效! 解决方案如下:

查看代码:

<ListView x:Name="DetailNotes"
          ItemTemplate="{StaticResource Notes600ItemTemplate}"/>

ViewModel代码:

private Note selectedDetailNote;

public Note SelectedDetailNote
{
    get { return this.selectedDetailNote; }
    set 
    { 
        this.selectedDetailNote = value; 
        this.NotifyOfPropertyChange(() => this.SelectedDetailNote); 
    }
}

答案 1 :(得分:-1)

我知道现在已经很晚了,但你的问题是绑定模式。你应该把它设置为TwoWay:

      SelectedItem="{Binding SelectedDetailNote, Mode=TwoWay}" 

在WinRT中,XAML默认为OneWay。