c# - 如何从代码隐藏刷新自定义 wpf 用户控件?

标签 c# wpf xaml user-controls code-behind

我有这个自定义 wpf 用户控件:

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:

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
    }
}

我通过这个 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>

我想从后面的代码中的事件处理程序更新控件(即在本示例中显示当前时间):

using System.Windows;

namespace TestControlUpdate2343
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void Button_RefreshControls_Click(object sender, RoutedEventArgs e)
        {
            //ShowCustomerControl.Refresh()???
        }
    }
}

如何从代码后面强制刷新自定义控件,或者强制它以某种方式重新加载,以便当我单击按钮时它会显示当前时间?

最佳答案

在 Window1.xaml.cs 中 -

private void Button_RefreshControls_Click(object sender, RoutedEventArgs e)
{
    ShowCustomerControl.Refresh();
}

在 ShowCustomer.xaml.cs 中 -

    public ShowCustomer()
    {
        InitializeComponent();
        DataContext = this;

        Refresh();
    }

    public void Refresh()
    {
        Message = "showing test customer at: " + DateTime.Now.ToString();
    }

希望这有帮助!!

关于c# - 如何从代码隐藏刷新自定义 wpf 用户控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1901281/

相关文章:

c# - wpf 绑定(bind) Material 设计对话框宽度小于或超过窗口宽度

c# - 从 EF 选择返回元组

c# - WPF 弹出 ZOrder

wpf - 在 Windows 上绘制叠加图形的最佳方法是什么?

c# - AvalonDock-如何为所有 anchor 禁用自动隐藏功能

wpf - 在 Setter.Value 结构中设置事件处理程序

c# - 为什么 C# 没有非虚拟调用约定?

c# - 使用 C# 确定谁打开了文件

c# - 从字符串中查找文件路径

wpf - 如何隐藏绑定(bind)到无法执行的命令的按钮?