1. 程式人生 > >WPF MVVM單例項繫結解決全域性呼叫問題

WPF MVVM單例項繫結解決全域性呼叫問題

對於出入門MVVM模式的人來說,能夠實現Model和View的繫結,但是慢慢的肯定會發現一個問題,那就是如果想在專案其他的類中去給Model的資料賦值或者呼叫Model方法,那就沒得搞啦。

對於這個問題,有一種很不錯的單例項思想能夠完美的解決,話不多說,直接上程式碼:

首先,我們假定已經做好的Model的定義和繫結,那麼我們現在來在Model中建立單例項。

       private static MainViewModel current;
       public static MainViewModel Current
        {
            get
            {
                if (current == null)
                {
                    current = new MainViewModel();
                }
                return current;
            }
            set
            {
                current = value;
            }
        }

然後,我們就可以在其他類中來操作這個Model中的資料了。這裡我們在一個可愛的Button的點選事件中來做實驗。

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            MainViewModel.Current.Data = tb.Text.ToString();
        }

當然,如果xaml中仍然是普通的Binding肯定也是不行的啦,需要使用靜態繫結。

    <Grid>
        <Label Content="繫結物件" Width="100" Height="30" Margin="96,146,322.4,146.4" ></Label>
        <TextBox Text="{Binding Data,Source={x:Static local:MainViewModel.Current},Mode=OneWay}" Margin="178,137,100.4,146.4"></TextBox>

        <Label Content="繫結源" Width="100" Height="30" Margin="96,202,322.4,90.4" ></Label>
        <TextBox Text="哈哈" x:Name="tb" Margin="178,202,100.4,81.4"></TextBox>
        <Button Content="變" Margin="436,202,25.4,89.4" Click="Button_Click"></Button>
    </Grid>

我知道大家都跟我一樣,最喜歡的還是呆毛,作為一個懶得發毛的博主,本人勉為其難的給大家寫了個呆毛。

下載呆毛