gpt4 book ai didi

c# - 在我的 C# XAML Windows 8.1 应用程序中,如何进行编程绑定(bind)?

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:15 25 4
gpt4 key购买 nike

我是 Windows 8.1 开发以及 C# 和 XAML 的新手,如果这是一个非常初级的问题,请原谅我。首先,我使用以下页面作为我在这里所做的大部分工作的灵感:

https://msdn.microsoft.com/en-us/library/ms742863(v=vs.110).aspx

这是我页面的 XAML:

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button HorizontalAlignment="Left" Content="this is my button" Click="Button_Click" />
<TextBox Text="This is a bound text box" x:Name="BoundTextBox" />
<TextBlock Text="This is a bound text block" x:Name="BoundTextBlock" />
</StackPanel>

这是我的代码隐藏:

public sealed partial class MyPage : Page, INotifyPropertyChanged
{

#region Str variable
// Create the source string.
private string str = "Initial Value of the 'str' variable";

public string Str
{
get { return str; }
set {
str = value;
NotifyPropertyChanged("Str");
}
}


public event PropertyChangedEventHandler PropertyChanged;

private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion

...

protected override void OnNavigatedTo(NavigationEventArgs e)
{
// Create the binding description.
Binding binding = new Binding(); // 'Binding' has no one-parameter constructors, so changed from MS's documentation
binding.Mode = BindingMode.OneWay; // I tried TwoWay, as well, but that also did not work
binding.Source = Str;

// Attach the binding to the target.
BoundTextBox.SetBinding(TextBox.TextProperty, binding);
BoundTextBlock.SetBinding(TextBlock.TextProperty, binding);
}

private void Button_Click(object sender, RoutedEventArgs e)
{
this.TextColorBrush = new SolidColorBrush(Colors.Red);

if (Str == "Changed Value ONE")
{
Str = "SECOND Changed Value";
}
else
{
Str = "Changed Value ONE";
}
}
}

发生的事情是 TextBox 和 TextBlock 都将它们的 Text 属性设置为 “str”变量的初始值,但是当我单击按钮和 str< 的基础值时 更改(我验证了断点和单步执行实际上发生了),TextBlock 和 TextBox 的 Text 值没有改变。

当我以另一种方式进行绑定(bind)时(即在 XAML 中而不是在代码隐藏中),它确实有效。这是我为实现这一目标所做的一切:

    <Page
x:Name="This"
...
>
<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button HorizontalAlignment="Left" Content="this is my button" Click="Button_Click" />
<TextBox Text="{Binding ElementName=This, Path=Str, Mode=OneWay}" x:Name="BoundTextBox" />
<TextBlock Text="{Binding ElementName=This, Path=Str, Mode=OneWay}" x:Name="BoundTextBlock" />
</StackPanel>
</Page>

所以我的主要问题是“如何让代码隐藏数据绑定(bind)工作,就像基于 XAML 的绑定(bind)工作一样?”。

在此先感谢您提供的任何帮助、建议或提示!

最佳答案

你应该设置 binding.Source = this; binding.Path = new PropertyPath("Str")

原因是如果你设置 binding.Source = Str ,它只会获取 Str 的值,并且无法检测到变化。因此源应该是实现 INotifyPropertyChanged 的​​类,并且还给它一个 Path 以便 Binding 类观察者该属性的更改

关于c# - 在我的 C# XAML Windows 8.1 应用程序中,如何进行编程绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29613365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com