91手机视频在线-91手机视频在线观看-91手机在线-91手机在线播放-91手机在线观看

完善主體資料,免費(fèi)贈(zèng)送VIP會(huì)員!
* 主體類(lèi)型
* 企業(yè)名稱(chēng)
* 信用代碼
* 所在行業(yè)
* 企業(yè)規(guī)模
* 所在職位
* 姓名
* 所在行業(yè)
* 學(xué)歷
* 工作性質(zhì)
請(qǐng)先選擇行業(yè)
您還可以選擇以下福利:
行業(yè)福利,領(lǐng)完即止!

下載app免費(fèi)領(lǐng)取會(huì)員

NULL

ad.jpg

二次開(kāi)發(fā)教程:WPF DataContent內(nèi)存釋放問(wèn)題

發(fā)布于:2019-07-25 15:06:21

網(wǎng)友投稿

更多

最近發(fā)現(xiàn)一個(gè)有趣的事,通過(guò)Window.dataContent來(lái)設(shè)置綁定以后,


窗體關(guān)閉以后 ViewModel 并沒(méi)有釋放,再次調(diào)用改窗體后,前一個(gè)ViewModel才釋放,


或者是程序關(guān)閉以后才釋放 ,搞不懂。。。


如果要馬上釋放ViewModel可以在Window關(guān)閉以后將DataContent 設(shè)置為null ,


這樣ViewModel是可以釋放的


下面是測(cè)試代碼,大神請(qǐng)指教!




主窗體:


<Window x:Class="WeakViewModel.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WeakViewModel"

        mc:Ignorable="d"

        Title="MainWindow" Height="350" Width="525">

    <Grid>

        <Button Content="Win1"  HorizontalAlignment="Left" Margin="367,211,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>

        <Button Content="GC" HorizontalAlignment="Left" Margin="128,211,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>

    </Grid>

</Window>


    public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

        }


        private void Button_Click(object sender, RoutedEventArgs e)

        {

            TestWindow win = new TestWindow();

            win.Owner = this;

            win.DataContext = ViewModel.Default;

            win.Show();

        }


        private void Button_Click_1(object sender, RoutedEventArgs e)

        {            

            GC.Collect();

        }

    }




測(cè)試窗體:


<Window x:Class="WeakViewModel.TestWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WeakViewModel"

        mc:Ignorable="d"        

        Title="TestWindow" Height="300" Width="300">

    <Grid>

        <TextBox HorizontalAlignment="Left" Height="23" Margin="96,111,0,0" TextWrapping="Wrap" Text="{Binding Path=Text}" VerticalAlignment="Top" Width="120"/>

    </Grid>

</Window>


    public partial class TestWindow : Window

    {

        public TestWindow()

        {

            InitializeComponent();

            Closed += TestWindow_Closed;

        }

        ~ TestWindow()

        {

            MessageBox.Show("釋放TestWindow");

        }

        private void TestWindow_Closed(object sender, EventArgs e)

        {


            //注釋這個(gè)行就能看出差別


            DataContext = null;

        }

    }




測(cè)試ViewModel:


    public class ViewModel

    {

        private static WeakReference _default = null;

        private static object locker = new object();

        public static ViewModel Default

        {

            get

            {

                if(_default==null||!_default.IsAlive)

                {

                    lock (locker)

                    {

                        _default = new WeakReference(new ViewModel());

                    }

                }

                return _default.Target as ViewModel;

            }

        }


        private ViewModel()

        {


        }


         ~ViewModel()

        {

            MessageBox.Show("釋放 ViewModel"+Text);

        }


        private string _text = string.Empty;

        public string Text

        {

            get

            {

                return _text;

            }

            set

            {

                _text = value;

            }

        }


    }

本文版權(quán)歸腿腿教學(xué)網(wǎng)及原創(chuàng)作者所有,未經(jīng)授權(quán),謝絕轉(zhuǎn)載。

未標(biāo)題-1.jpg

上一篇:revit中尺寸標(biāo)注的新奇方法

下一篇:二次開(kāi)發(fā)教程:WPF 給控件添加可以綁定的命令

主站蜘蛛池模板: 国产亚洲精品久久久久91网站 | 九色精品高清在线播放 | 国产精品成人嫩妇 | 国产精品日日做人人爱 | 97在线视频观看 | 久久久青草青青亚洲国产免观 | 久久精品国产99久久3d动漫 | 日韩一区二区三区免费视频 | 午夜精品久久久久久久久 | 国产欧美精品一区二区三区-老狼 | 国产精品综合色区在线观看 | 免费看的一级片 | 99热这里只有精品国产99热门精品 | 久久久国产这里有的是精品 | 在线国产欧美 | 一区二区三区欧美视频 | 色男人天堂 | 日韩精品亚洲专区在线观看 | 亚洲精品中文字幕区 | 国产综合欧美日韩视频一区 | 欧美日韩在线高清 | 日韩精品一区二区三区免费视频 | 亚洲精品久中文字幕 | 成人国产精品毛片 | 大学生久久香蕉国产线看观看 | www视频在线观看 | 亚洲国产精品va在线观看麻豆 | 国产精品揄拍一区二区 | 国产不卡视频在线 | 国产第一页在线观看 | 精品视频手机在线观看免费 | 欧美一级特黄高清免费 | 成人资源网站 | 国产综合成色在线视频 | 日韩 欧美 亚洲 | 黑人破乌克兰美女处 | 欧美性高清在线 | 国产精品日韩欧美一区二区三区 | 青草视频网站 | 成人在色线视频在线观看免费大全 | 欧美女同视频激情 |