WPF treeivew 数据绑定解决思路
WPF treeivew 数据绑定
数据已更改,界面没变化。
XAML.
ViewModel.
treeview打开的时候,是可以显示数据,但是VIEWMODEL里的TreeViewList已改变,但界面没变化,
为了对比,我用了个BUTTON, 这个BUTTON绑定就没问题。
------解决方案--------------------
是否先.Items.Clear();//先清理一下节点 ,在做绑定。
------解决方案--------------------
list换成 ObservableCollection
------解决方案--------------------
把 你的ViewModel 继承自INotifyPropertyChanged接口,并实现其中的方法。
数据已更改,界面没变化。
XAML.
<UserControl.DataContext >
<local:RegionTreeListViewModel /> 在这里绑定VIEWMODEL
</UserControl.DataContext>
<TreeView Name="regionTree" ItemsSource="{Binding TreeViewList}">
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode= OneWay}"></Setter>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:TreeViewModel}" ItemsSource="{Binding Children}">
<StackPanel Margin="-2,0,0,0" Orientation="Horizontal" x:Name="staTree" >
<CheckBox Style="{x:Null}" IsChecked="{Binding IsChecked, Mode=TwoWay}" VerticalAlignment="Center" Visibility="{Binding CheckBoxVisible}" />
<StackPanel Orientation="Horizontal" ToolTip="{Binding ToolTip}">
<Image VerticalAlignment="Center" Source="{Binding Icon}" Visibility="{Binding ImageVisible}" Width="16" Height="16" ></Image>
<TextBlock Text="{Binding Name}" x:Name="txt" VerticalAlignment="Center"></TextBlock>
</StackPanel>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<Button Content="{Binding BtName}" Grid.Row="1" Command="{Binding BtCmd}"></Button> 测试,这个绑定没问题
ViewModel.
public List<TreeViewModel> TreeViewList
{
get
{
return _treeList;
}
set
{
_treeList = value;
this.RaisePropertyChanged("TreeViewList");
}
}
treeview打开的时候,是可以显示数据,但是VIEWMODEL里的TreeViewList已改变,但界面没变化,
为了对比,我用了个BUTTON, 这个BUTTON绑定就没问题。
------解决方案--------------------
是否先.Items.Clear();//先清理一下节点 ,在做绑定。
------解决方案--------------------
list换成 ObservableCollection
------解决方案--------------------
把 你的ViewModel 继承自INotifyPropertyChanged接口,并实现其中的方法。
public event PropertyChangedEventHandler PropertyChanged;
public void OnChangedProperty(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}