从MainWindow更新用户控件

时间:2013-04-16 17:29:11

标签: c# wpf

首先,请在MainWindow中查看此代码

    <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

示例,在用户控件中,RightPanel具有TextBlock名称文本块。 然后,我想更新TextBlock,我在MainWindow,我必须调用rightPanel.textblock.Text ="..."

所以我认为这不是一个好方法,因为如果我在另一个类,所以我不能回到MainWindow更新这个文本块,我不能调用一个方法(静态或非方法)到MainWindow或者到RightPanel进行更新。再一次,我认为它不好,任何时候你必须互动MainWindow,而我认为我们应该直接将消息发送到RightPanel。

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

2 个答案:

答案 0 :(得分:3)

您可以向RightSideContent用户控件添加依赖项属性以处理文本。这将允许您直接从MainWindow的xaml。

绑定它

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

答案 1 :(得分:2)

您可以创建一个名为“Text”的Dependency Property,然后将其绑定到MainWindow的DataContext上的属性。

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

private string _rightSideText = string.Empty;
public string RightSideText
{
    get { return _rightSideText; }
    set
    {
        _rightSideText = value;
        OnPropertyChanged("RightSideText");
    }
}

这假设您已在MainWindow上实施了INotifyPropertyChanged

然后,在您的MainWindow 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>

这假设您已添加依赖项属性。

完成后,无论何时想要更改文本,都需要设置“RightSideText”。