C# 如何从后面的代码刷新自定义 wpf 用户控件?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 
原文地址: http://stackoverflow.com/questions/1901281/
Warning: these are provided under cc-by-sa 4.0 license.  You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How can I refresh a custom wpf user control from code behind?
提问by Edward Tanguay
I have this custom wpf user control:
我有这个自定义 wpf 用户控件:
ShowCustomer.xaml:
ShowCustomer.xaml:
<UserControl x:Class="TestControlUpdate2343.Controls.ShowCustomer"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <TextBlock Text="{Binding Message}"/>
    </Grid>
</UserControl>
ShowCustomer.xaml.cs:
ShowCustomer.xaml.cs:
using System.Windows.Controls;
using System;
using System.ComponentModel;
namespace TestControlUpdate2343.Controls
{
    public partial class ShowCustomer : UserControl, INotifyPropertyChanged
    {
        #region ViewModelProperty: Message
        private string _message;
        public string Message
        {
            get
            {
                return _message;
            }
            set
            {
                _message = value;
                OnPropertyChanged("Message");
            }
        }
        #endregion
        public ShowCustomer()
        {
            InitializeComponent();
            DataContext = this;
            Message = "showing test customer at: " + DateTime.Now.ToString();
        }
        #region INotifiedProperty Block
        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        #endregion
    }
}
And I display it from this XAML:
我从这个 XAML 显示它:
Window1.xaml:
Window1.xaml:
<Window x:Class="TestControlUpdate2343.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:controls="clr-namespace:TestControlUpdate2343.Controls"
    Title="Window1" Height="300" Width="300">
    <StackPanel HorizontalAlignment="Left" Margin="10">
        <controls:ShowCustomer x:Name="ShowCustomerControl" Margin="0 0 0 10"/>
        <Button Content="Refresh Control" 
                Click="Button_RefreshControls_Click"
                Margin="0 0 0 10"/>
    </StackPanel>
</Window>
And I would like to update the control (i.e. in this example show the current time) from my event handler in code behind:
我想从后面的代码中的事件处理程序更新控件(即在此示例中显示当前时间):
using System.Windows;
namespace TestControlUpdate2343
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }
        private void Button_RefreshControls_Click(object sender, RoutedEventArgs e)
        {
            //ShowCustomerControl.Refresh()???
        }
    }
}
How can I force a refresh of my custom control from code behind, or force it to reload somehow so when I click the button it shows the current time?
如何从后面的代码强制刷新我的自定义控件,或者强制它以某种方式重新加载,以便在单击按钮时显示当前时间?
采纳答案by viky
in Window1.xaml.cs -
在 Window1.xaml.cs 中 -
private void Button_RefreshControls_Click(object sender, RoutedEventArgs e)
{
    ShowCustomerControl.Refresh();
}
in ShowCustomer.xaml.cs -
在 ShowCustomer.xaml.cs 中 -
    public ShowCustomer()
    {
        InitializeComponent();
        DataContext = this;
        Refresh();
    }
    public void Refresh()
    {
        Message = "showing test customer at: " + DateTime.Now.ToString();
    }
Hope this helps!!
希望这可以帮助!!
回答by Rich257
Or have a LastUpdate property on ShowWindow and set that, which then regenerates the Message property.
或者在 ShowWindow 上有一个 LastUpdate 属性并设置它,然后重新生成 Message 属性。

