x:Bind 不适用于 button_click,在 MainPage() 中运行良好

x:Bind does not work on button_click, works fine in MainPage()

我是新手,所以我不确定我的代码有什么问题。 x:Bind 在 MainPage() 方法中工作正常,但在 button_click 事件中不起作用。

在 button_click 事件中只有第二个 RichTextBox 被填充,但是在 MainPage() 方法中两个 RichTextBox 都被填充。我将无法绑定 button_click 事件而不是 MainPage() 方法。

谢谢

引证;

    public MainPage()
    {
       // DateTime dat = DateTime.Now;


        this.InitializeComponent();
       // cit = new Citati();
       // int dan = dat.DayOfYear;
       // cit.Citiranje(dan);
       // stpCitat.DataContext = cit;

       //Works for both RichTextBoxes


    }



    private void btnPopulate_Click(object sender, RoutedEventArgs e)
    {
        DateTime dat = DateTime.Now;
        cit = new Citati();
        int dan = dat.DayOfYear;
        cit.Citiranje(dan);
        stpCitat.DataContext = cit;

        //Works only for second RichTextBox


    }

    <StackPanel x:Name="stpCitat">
                <RichTextBlock  x:Name="rtbFirst" >
                    <Paragraph   Margin="50,0,0,0" FontSize="21.333"  >
                        <Run Text="{x:Bind cit.Citat}" Foreground="#FFE02323"></Run>
                    </Paragraph>                        
                    <Paragraph Margin="200,0,0,0">
                        <Hyperlink NavigateUri="{x:Bind cit.Wiki, Mode=OneWay}" >
                            <Run Text="{x:Bind cit.Slikar}" >
                            </Run>
                        </Hyperlink>
                    </Paragraph>
                </RichTextBlock>


                <RichTextBlock  x:Name="rtbSecond" >
                    <Paragraph  Margin="50,0,0,0" FontSize="21.333"  >
                        <Run Text="{Binding Citat}"></Run>
                    </Paragraph>                       
                    <Paragraph Margin="200,0,0,0">                           
                        <Hyperlink NavigateUri="{Binding Wiki}" >
                            <Run Text="{Binding Slikar}" >                                    
                            </Run>
                        </Hyperlink>
                    </Paragraph>
                </RichTextBlock>
                <Button x:Name="btnPopulate" Click="btnPopulate_Click">  
            </StackPanel>

由于以下两个原因,代码无法运行:

  1. 我很确定您的 cir 不是依赖项 属性,也不是 INotifyPropertyChanged 属性。第二个框已更新,因为您将新的 cin 分配给 DataContext,这是一个依赖项 属性.
  2. x:Bind 默认模式是 OneTime,因此如果 属性 或数据上下文发生变化,绑定将不会更新。

因此,为了使此代码正常工作,您需要执行以下操作:

  1. 创建一个依赖项 属性,它将包含 Citati.
  2. 的一个实例
  3. 将您的属性与 Mode=OneWay 绑定。

下面的代码可以帮助您:

public static readonly DependencyProperty CinProperty = 
     DependencyProperty.Register("Cin", typeof(Citati),
     typeof(MainPage), new FrameworkPropertyMetadata(null));

public Citati Cin
{
    get { return (Citati)GetValue(CinProperty); }
    set { SetValue(CinProperty, value); }
}

private void btnPopulate_Click(object sender, RoutedEventArgs e)
{
    var dat = DateTime.Now;
    var cit = new Citati();
    int dan = dat.DayOfYear;
    cit.Citiranje(dan);

    stpCitat.DataContext = cit;
    Cit = cit;
}

和标记:

<RichTextBlock x:Name="rtbFirst" >
    <Paragraph Margin="50,0,0,0" FontSize="21.333"  >
        <Run Text="{x:Bind Cit.Citat, Mode=OneWay}" Foreground="#FFE02323"/>
    </Paragraph>                        
    <Paragraph Margin="200,0,0,0">
        <Hyperlink NavigateUri="{x:Bind cit.Wiki, Mode=OneWay}" >
            <Run Text="{x:Bind Cit.Slikar, Mode=OneWay}"/>
        </Hyperlink>
    </Paragraph>
</RichTextBlock>