ObservableCollection 的排序不会改变 TreeView
Sorting of ObservableCollection does not change TreeView
我有一个 UWP 项目 c#,我在其中声明了一个 ObservableCollection 项目,在页面上有一个绑定到该集合的 TreeView。当我加载它时一切正常并且 TreeView 已填充。
然后我添加了一个按钮来对它进行升序和降序排序,但是当我对它进行排序时,TreeView 没有改变;我已经阅读了很多类似的问题,但无法找到解决方案。
其中之一的解决方案是:
public ObservableCollection<MTreeViewPaz> Patients { get; private set; } = new ObservableCollection<MTreeViewPaz>();
...在AppBar代码后面就AppBarToggleButton_Checked:
Patients = new ObservableCollection<MTreeViewPaz>(
from i in Patients orderby i.Data descending, i.Cognome, i.Nome select i);
视图绑定到患者:
<winui:TreeView
x:Name="treeView"
Grid.Row="1"
Expanding="treeView_Expanding"
ItemInvoked="OnItemInvoked"
ItemTemplate="{StaticResource ItemTemplate}"
ItemsSource="{x:Bind Patients}"
SelectionMode="Single" />
但是没有任何反应。
我已经用调试器检查过,患者项目在排序前后是不同的。所以那部分工作正常,只是没有显示。
即使它应该是无用的,因为 ObservableCollection 应该会引发事件我什至尝试过这样做:
private ObservableCollection<MTreeViewPaz> _Patients;
public ObservableCollection<MTreeViewPaz> Patients
{
get { return _Patients; }
private set { Set(ref _Patients, value); }
}
private void Set<T>(ref T storage, T value, [CallerMemberName]string propertyName = null)
{
if (Equals(storage, value))
{
return;
}
storage = value;
OnPropertyChanged(propertyName);
}
private void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
但是不行
Sorting of ObservableCollection does not change TreeView
为了检查上面的代码,我发现你使用了默认的 x:Bind
模式(一次)。它不会响应 Patients
重置。请将上面的内容编辑为 OneWay
模式。
ItemsSource="{x:Bind DataSource, Mode=OneWay}"
我有一个 UWP 项目 c#,我在其中声明了一个 ObservableCollection 项目,在页面上有一个绑定到该集合的 TreeView。当我加载它时一切正常并且 TreeView 已填充。
然后我添加了一个按钮来对它进行升序和降序排序,但是当我对它进行排序时,TreeView 没有改变;我已经阅读了很多类似的问题,但无法找到解决方案。
其中之一的解决方案是:
public ObservableCollection<MTreeViewPaz> Patients { get; private set; } = new ObservableCollection<MTreeViewPaz>();
...在AppBar代码后面就AppBarToggleButton_Checked:
Patients = new ObservableCollection<MTreeViewPaz>(
from i in Patients orderby i.Data descending, i.Cognome, i.Nome select i);
视图绑定到患者:
<winui:TreeView
x:Name="treeView"
Grid.Row="1"
Expanding="treeView_Expanding"
ItemInvoked="OnItemInvoked"
ItemTemplate="{StaticResource ItemTemplate}"
ItemsSource="{x:Bind Patients}"
SelectionMode="Single" />
但是没有任何反应。 我已经用调试器检查过,患者项目在排序前后是不同的。所以那部分工作正常,只是没有显示。
即使它应该是无用的,因为 ObservableCollection 应该会引发事件我什至尝试过这样做:
private ObservableCollection<MTreeViewPaz> _Patients;
public ObservableCollection<MTreeViewPaz> Patients
{
get { return _Patients; }
private set { Set(ref _Patients, value); }
}
private void Set<T>(ref T storage, T value, [CallerMemberName]string propertyName = null)
{
if (Equals(storage, value))
{
return;
}
storage = value;
OnPropertyChanged(propertyName);
}
private void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
但是不行
Sorting of ObservableCollection does not change TreeView
为了检查上面的代码,我发现你使用了默认的 x:Bind
模式(一次)。它不会响应 Patients
重置。请将上面的内容编辑为 OneWay
模式。
ItemsSource="{x:Bind DataSource, Mode=OneWay}"