MVVM模式下ComboBox绑定

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/baidu_38131614/article/details/78722409

定义 :

 

class CommonBox
    {
        public string Namepath { get; set; }
        public int Value { get; set; }
    }
//检测线路
        public List<CommonBox> checkLines { get; set; }
        public CommonBox checkLine { get; set; }

 this.checkLines = new List<CommonBox>();
 this.checkLines.Add(new CommonBox() { Namepath = "线路1", Value = 1 });
            this.checkLines.Add(new CommonBox() { Namepath = "线路2", Value = 1 });
            this.checkLine = this.checkLines[0];


xaml

 ItemsSource 绑定数据源,

 SelectedItem 当前项,

checkLine.Namepath != " " 判断当前项目是不是为空

 

<Label Content="检测线路:" HorizontalAlignment="Left" Margin="0,10,0,0" VerticalAlignment="Top"/>
                            <ComboBox HorizontalAlignment="Left" Margin="61,10,0,0" VerticalAlignment="Top" Width="120" 
                                      ItemsSource="{Binding checkLines}"
                                      DisplayMemberPath="Namepath"
                                      SelectedItem="{Binding checkLine}"/>

 

 

 

 

 

展开阅读全文

WPF MVVM模式中的DataGrid绑定问题!

05-05

1,问题:rn在ViewModel中通过重新从数据库获取集合赋值到ViewModel集合 前台不更新!!!!!rn-->一个window:含有一个DataGrid,DataContex已经绑定好对应的ViewModelrn-->另一个window:输入一个员工的信息添加到数据库rn-->一个Model:员工各种属性rn-->一个ViewModel:含有一个Model的集合,类型为Observerbal<>,以MVVM属性方式定义,已经继承ViewModelBasern2,部分代码:rnrnrn(viewmodel)rn[code=csharp]rnpublic class EmployeeManageViewModel:ViewModelBasern rn private ObservableCollection employeeModelList;rn public ObservableCollection EmployeeModelListrn rn get return employeeModelList; rn setrn rn employeeModelList = value;rn RaisePropertyChanged("EmployeeModelList");rn rn rn public EmployeeBLL employeeBLL = new EmployeeBLL();//获取员工列表BLL(从数据库)rn public EmployeeManageViewModel()rn rn MsgHelper.RefreshDataGridEvent += MsgHelper_RefreshDataGridEvent;//更新list事件rn if (IsInDesignMode)rn rnrn rn elsern rn employeeModelList = employeeBLL.GetEmployees();//从数据库获取集合rn rn rnrn private void MsgHelper_RefreshDataGridEvent()rn rn employeeModelList = employeeBLL.GetEmployees();//从数据库 再 获取一次赋值给集合rn rn rn[/code]rnrnrn另一个窗口添加一个员工(部分代码)rn[code=csharp]rnemployeeBLL.InsertEmployee(employeeInfo.employeeModel);//插入数据库rnMsgHelper.RefreshDataGrid();//委托更新listrn[/code]rnrnrn委托传递类rn[code=csharp]rnpublic delegate void ShowMainMenuHandle();rn public delegate void RefreshDataGridHandle();rn public static class MsgHelperrn rn public static event RefreshDataGridHandle RefreshDataGridEvent;rn public static void RefreshDataGrid()rn rn RefreshDataGridEvent();rn rn rn[/code]rnrnrn过程描述:rn输入一个员工信息rn点击保存rn更新数据库rn委托更新另一个窗口的ViewModel(那个集合)rn[b]可是,发现并不能更新............并且employeeModelList.Add(new EmployeeXXXXXX)可以加一个数据并更新,重新赋值不能更新!![/b]rn求解答 论坛

MVVM 清除绑定

07-01

老哥们 ,我遇到一个情况,就是当界面里一个图片绑定了BitmapImage 属性源的情况下,无法释放内存。是一个大项目中的一个问题,我整理了一下,下面用一个简单的示例演示:rnrn界面绑定了一个图片:rn[code=html]rnrn rn rn rnrn[/code]rnrn这个图片绑定的属性源:rn[code=csharp]rn private BitmapImage imageSource1;rnrn public BitmapImage ImageSource1rn rn getrn rn return imageSource1;rn rn setrn rn imageSource1 = value;rn if (null != PropertyChanged)rn rn PropertyChanged.Invoke(this, new PropertyChangedEventArgs("ImageSource1"));rn rn rn rn[/code]rnrn为了演示内存没被释放 ,用一个在MainWindow上的按钮来弹出上面的Window1界面:rn[code=html]rnrn rn rn rnrn[/code]rnrn[code=csharp]rn private void button_Click(object sender, RoutedEventArgs e)rn rnrn BitmapImage imageSource1 = new BitmapImage();rn imageSource1.BeginInit();rn imageSource1.CacheOption = BitmapCacheOption.OnLoad;rn imageSource1.StreamSource = new MemoryStream(File.ReadAllBytes("TestImage.png"));rn imageSource1.EndInit();rnrn Window1 w1 = new Window1();rn w1.ImageSource1 = imageSource1;rn w1.ShowDialog();rnrn //BindingOperations.ClearBinding(w1.image, System.Windows.Controls.Image.SourceProperty);rnrn rn[/code]rnrn在没关闭Window1界面的时候,内存里是有 Window1 这个实例的:rn[img=https://img-bbs.csdn.net/upload/201807/01/1530418552_514357.png][/img]rnrn当我关闭Window1界面的时候,内存里是还是有 Window1 这个实例的,显然Window1 没被释放掉:rn[img=https://img-bbs.csdn.net/upload/201807/01/1530418730_110676.png][/img]rnrn找了很久,发现原来是图片一直占用着绑定资源,直到我手动加上最后一句:rnrn[code=csharp]rn private void button_Click(object sender, RoutedEventArgs e)rn rnrn BitmapImage imageSource1 = new BitmapImage();rn imageSource1.BeginInit();rn imageSource1.CacheOption = BitmapCacheOption.OnLoad;rn imageSource1.StreamSource = new MemoryStream(File.ReadAllBytes("TestImage.png"));rn imageSource1.EndInit();rnrn Window1 w1 = new Window1();rn w1.ImageSource1 = imageSource1;rn w1.ShowDialog();rnrn BindingOperations.ClearBinding(w1.image, System.Windows.Controls.Image.SourceProperty);rnrn rn[/code]rnrn内存就被释放掉了:rnrn但是用这句就不能释放,存留疑问:rn[code=csharp]rnBindingOperations.ClearAllBindings(w1);rn[/code]rnrn有人说换图片数据源,不要这么赋值,我也试过了,从一个文件直接绑定图片,是可以释放掉的,但是项目里是从硬件里copy过来byte[]转换成的图片, 上面的只是我为了演示,暂时从图片文件里获取。rnrn最后,我就是想知道有没有其它方法能够释放掉上面的图片绑定,我不想给界面控件赋上一个x:Name="xxx" ,然后再用下面的方式去解绑BindingOperations.ClearBinding([color=#FF0000]w1.xxx[/color], System.Windows.Controls.Image.SourceProperty)rnrn显然不符MVVM的风格,ViewModel里还有各种页面控件,看起来就很乱,有没有其它能从属性源头解绑的方式?或者其它更好的解绑做法?rnrn谢谢 老哥们了~ 论坛

WPF MVVM 清除绑定

07-01

WPF板块:rnrn老哥们 ,我遇到一个情况,就是当界面里一个图片绑定了BitmapImage 属性源的情况下,无法释放内存。是一个大项目中的一个问题,我整理了一下,下面用一个简单的示例演示:rnrn界面绑定了一个图片:rn[code=html]rnrn rn rn rnrn[/code]rnrn这个图片绑定的属性源:rn[code=csharp]rn private BitmapImage imageSource1;rnrn public BitmapImage ImageSource1rn rn getrn rn return imageSource1;rn rn setrn rn imageSource1 = value;rn if (null != PropertyChanged)rn rn PropertyChanged.Invoke(this, new PropertyChangedEventArgs("ImageSource1"));rn rn rn rn[/code]rnrn为了演示内存没被释放 ,用一个在MainWindow上的按钮来弹出上面的Window1界面:rn[code=html]rnrn rn rn rnrn[/code]rnrn[code=csharp]rn private void button_Click(object sender, RoutedEventArgs e)rn rnrn BitmapImage imageSource1 = new BitmapImage();rn imageSource1.BeginInit();rn imageSource1.CacheOption = BitmapCacheOption.OnLoad;rn imageSource1.StreamSource = new MemoryStream(File.ReadAllBytes("TestImage.png"));rn imageSource1.EndInit();rnrn Window1 w1 = new Window1();rn w1.ImageSource1 = imageSource1;rn w1.ShowDialog();rnrn //BindingOperations.ClearBinding(w1.image, System.Windows.Controls.Image.SourceProperty);rnrn rn[/code]rnrn在没关闭Window1界面的时候,内存里是有 Window1 这个实例的:rn[img=https://img-bbs.csdn.net/upload/201807/01/1530418552_514357.png][/img]rnrn当我关闭Window1界面的时候,内存里是还是有 Window1 这个实例的,显然Window1 没被释放掉:rn[img=https://img-bbs.csdn.net/upload/201807/01/1530418730_110676.png][/img]rnrn找了很久,发现原来是图片一直占用着绑定资源,直到我手动加上最后一句:rnrn[code=csharp]rn private void button_Click(object sender, RoutedEventArgs e)rn rnrn BitmapImage imageSource1 = new BitmapImage();rn imageSource1.BeginInit();rn imageSource1.CacheOption = BitmapCacheOption.OnLoad;rn imageSource1.StreamSource = new MemoryStream(File.ReadAllBytes("TestImage.png"));rn imageSource1.EndInit();rnrn Window1 w1 = new Window1();rn w1.ImageSource1 = imageSource1;rn w1.ShowDialog();rnrn BindingOperations.ClearBinding(w1.image, System.Windows.Controls.Image.SourceProperty);rnrn rn[/code]rnrn内存就被释放掉了:rnrn但是用这句就不能释放,存留疑问:rn[code=csharp]rnBindingOperations.ClearAllBindings(w1);rn[/code]rnrn有人说换图片数据源,不要这么赋值,我也试过了,从一个文件直接绑定图片,是可以释放掉的,但是项目里是从硬件里copy过来byte[]转换成的图片, 上面的只是我为了演示,暂时从图片文件里获取。rnrn最后,我就是想知道有没有其它方法能够释放掉上面的图片绑定,我不想给界面控件赋上一个x:Name="xxx" ,然后再用下面的方式去解绑BindingOperations.ClearBinding([color=#FF0000]w1.xxx[/color], System.Windows.Controls.Image.SourceProperty)rnrn显然不符MVVM的风格,ViewModel里还有各种页面控件,看起来就很乱,有没有其它能从属性源头解绑的方式?或者其它更好的解绑做法?rnrn谢谢 老哥们了~ 论坛

没有更多推荐了,返回首页