抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

一、动态模板DataTemplate内,能用MVVM赋值,但是无法改变值,无法触发点击事件

解决:
1、需要改变 TextBoxComboBox 的值,需绑定 UpdateSourceTrigger 属性
例如:

Text="{Binding Path=TextBoxValue,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
SelectedItem="{Binding Path=TextBoxValue,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"

其他控件绑定值同理

2、需要在动态模板内执行 button 的点击事件,需配置 ElementName 属性,例如

Command="{Binding ElementName=Capture,Path=DataContext.SelectFile}"

其中ElementName属性选择的是页面最上层Windowx:Name
其他控件绑定事件同理

二、使用MVVM动态集合ObservableCollection时,只能在model减少或增加时,才能动态更改UI。而仅仅改变model里某个字段时,UI并不会刷新

解决:
1、更改完ObservableCollection里的model字段后,将ObservableCollection动态集合赋值到List里,随后用Clear清空整个ObservableCollection,再用foreach遍历List,逐行添加到ObservableCollection,即可完成界面的刷新

2、
配置INotifyPropertyChanged基类
例如:

public class UserViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual bool SetProperty<T>(ref T member, T value, [CallerMemberName] string propertyName = null)
        {
            if (EqualityComparer<T>.Default.Equals(member, value))
            {
                return false;
            }

            member = value;
            RaisePropertyChanged(propertyName);
            return true;
        }
        protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
            => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

重新设置model
例如:

public class TabData : UserViewModel
        {
            private int _num;
            private bool _check;
            private string _name;
            public int num { get => _num; set => SetProperty(ref _num, value); }
            public bool check { get => _check; set => SetProperty(ref _check, value); }
            public string name { get => _name; set => SetProperty(ref _name, value); }
        }

再使用ObservableCollection,任意改变model字段值都能主动刷新

 public ObservableCollection<TabData> TabList { get;set; } = new ObservableCollection<TabData>();

三、ListView隐藏标题栏

<ListView.Resources>
   <Style TargetType="{x:Type GridViewColumnHeader}">
   <Setter Property="Visibility" Value="Collapsed"/></Style>
</ListView.Resources>