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>
由于以下两个原因,代码无法运行:
- 我很确定您的
cir
不是依赖项 属性,也不是 INotifyPropertyChanged
属性。第二个框已更新,因为您将新的 cin
分配给 DataContext
,这是一个依赖项 属性.
x:Bind
默认模式是 OneTime
,因此如果 属性 或数据上下文发生变化,绑定将不会更新。
因此,为了使此代码正常工作,您需要执行以下操作:
- 创建一个依赖项 属性,它将包含
Citati
. 的一个实例
- 将您的属性与
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>
我是新手,所以我不确定我的代码有什么问题。 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>
由于以下两个原因,代码无法运行:
- 我很确定您的
cir
不是依赖项 属性,也不是INotifyPropertyChanged
属性。第二个框已更新,因为您将新的cin
分配给DataContext
,这是一个依赖项 属性. x:Bind
默认模式是OneTime
,因此如果 属性 或数据上下文发生变化,绑定将不会更新。
因此,为了使此代码正常工作,您需要执行以下操作:
- 创建一个依赖项 属性,它将包含
Citati
. 的一个实例
- 将您的属性与
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>