C# 从主窗口更新用户控件

C# 从主窗口更新用户控件,c#,wpf,C#,Wpf,首先,在主窗口中查看此代码 <Grid x:Name="LayoutRoot" MinWidth="900" MinHeight="650" RenderTransformOrigin="0.5,0.5"> <local:RightSideContent x:Name="rightPanel" Grid.Column="1" Width="Auto" Height="Auto"/> </Grid> 我创建了一个用户控

首先,在主窗口中查看此代码

    <Grid x:Name="LayoutRoot" MinWidth="900" MinHeight="650" RenderTransformOrigin="0.5,0.5">
        <local:RightSideContent x:Name="rightPanel"  Grid.Column="1"  Width="Auto" Height="Auto"/>

    </Grid>

我创建了一个用户控件名RightPanel,并将其命名为MainWindow.xaml RightPanel

例如,在用户控制右侧面板中有一个TextBlock名称TextBlock。 然后,我想更新TextBlock,我在主窗口中,我必须调用
rightPanel.TextBlock.Text=“…”

所以我认为这不是一个好方法,因为如果我在另一个类中,那么我不能返回MainWindow来更新这个文本块,也不能调用方法(静态或非静态)来更新MainWindow或RightPanel。还有一个原因,我认为它不好,任何时候你必须在主窗口进行交互,相反,我认为我们应该直接将消息发送到右面板


如果我的英语不够清晰,请帮助我,谢谢并原谅我

您可以向
RightSideContent
用户控件添加依赖项属性来处理文本。这将允许您直接从
主窗口的xaml绑定到它

然后,
RightSideContent
用户控件可以将
textblock.Text
绑定到该依赖项属性,显示其中的内容。

您可以创建一个名为“Text”的控件,然后将其绑定到主窗口的DataContext上的属性

假设您没有遵循MVVM模式,那么MainWindow.cs中会有一些属性,即代码隐藏。例如:

private string _rightSideText = string.Empty;
public string RightSideText
{
    get { return _rightSideText; }
    set
    {
        _rightSideText = value;
        OnPropertyChanged("RightSideText");
    }
}
这假设您已经在主窗口上实现了
INotifyPropertyChanged

然后,在主窗口XAML中:

<Grid x:Name="LayoutRoot" MinWidth="900" MinHeight="650" RenderTransformOrigin="0.5,0.5">
    <local:RightSideContent Text="{Binding Path=RightSideText}" x:Name="rightPanel"  Grid.Column="1"  Width="Auto" Height="Auto"/>
</Grid>

这假设您已经添加了dependency属性

完成后,只要在需要更改文本时设置“RightSideText”