C# 中的绑定和 XAML 错误
Binding in C# and XAML error
我有以下代码,我应该在 button.But 的 content
中放置一个随机数,而不是每次按钮的内容都是相同的值 0
-
这是我的 C#
代码的一部分-
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
this.DataContext = this;
this.NavigationCacheMode = NavigationCacheMode.Required;
}
public int RandomNumber { get; set; }
public int GenerateRandomNumber(int min, int max)
{
Random random = new Random();
return random.Next(5,40);
}
private void ButtonNo3(object sender, RoutedEventArgs e)
{
int ans = 0;
Button obj = (Button)sender;
var selectedButton = obj.Content.ToString();
//some more code
}
这是我的 XAML
代码的一部分,我的按钮在其内容中应该有一个随机数 -
<Button
x:Name="Button3"
Content="{Binding Path=RandomNumber}"
Click="ButtonNo3"
HorizontalAlignment="Left"
Margin="0,118,0,0"
VerticalAlignment="Top"
Height="37"
Width="47"/>
所以我的问题是为什么 Button3
的 Content
总是 0
而它应该是随机的。
您没有在任何地方调用 GenerateRandomNumber 函数(至少在显示的代码中没有),因此 RandomNumber 属性 将始终具有默认值 0。
以下应该可以解决问题
public sealed partial class MainPage : Page,INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private int __RandomNumber;
public MainPage()
{
this.InitializeComponent();
this.DataContext = this;
this.NavigationCacheMode = NavigationCacheMode.Required;
}
public int RandomNumber
{
get{return _RandomNumber}
set
{
if (_RandomNumber != value){
_RandomNumber = value;
this.OnPropertyChanged("RandomNumber");//needed for binding
}
};
}
public int GenerateRandomNumber(int min, int max)
{
Random random = new Random();
RandomNumber = random.Next(5,40); //changed this line, do the assign
return RandomNumber;
}
private void ButtonNo3(object sender, RoutedEventArgs e)
{
int ans = 0;
Button obj = (Button)sender;
var selectedButton = obj.Content.ToString();
//some more code
GenerateRandomNumber(0,0); //added : generate a random number
}
我用这段代码解决了多个问题。
您永远不会生成随机数,也不会分配它。
您没有实施 inotifypropertychanged,因此即使您生成了一个新号码,它也不会被绑定获取。上面的代码未经测试,可能还有一些问题,但应该能给你一个思路。
如前所述,您没有在任何地方调用 GenerateRandomNumber 方法。需要设置按钮的内容属性为随机数方法返回的值
要每次都获得不同的值,请在点击事件中设置 selectedButton 变量之前放置此代码。
obj.Content = GenerateRandomNumber(5,40);
var selectedButton = obj.Content;
另一个注意事项。 GenerateRandomNumber 方法的参数没有用。你没有使用 them.you 应该这样做:
private int GenerateRandonNumber( int min, int max ) {
Random random = new Random();
return random.Next( min, max );
}
我有以下代码,我应该在 button.But 的 content
中放置一个随机数,而不是每次按钮的内容都是相同的值 0
-
这是我的 C#
代码的一部分-
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
this.DataContext = this;
this.NavigationCacheMode = NavigationCacheMode.Required;
}
public int RandomNumber { get; set; }
public int GenerateRandomNumber(int min, int max)
{
Random random = new Random();
return random.Next(5,40);
}
private void ButtonNo3(object sender, RoutedEventArgs e)
{
int ans = 0;
Button obj = (Button)sender;
var selectedButton = obj.Content.ToString();
//some more code
}
这是我的 XAML
代码的一部分,我的按钮在其内容中应该有一个随机数 -
<Button
x:Name="Button3"
Content="{Binding Path=RandomNumber}"
Click="ButtonNo3"
HorizontalAlignment="Left"
Margin="0,118,0,0"
VerticalAlignment="Top"
Height="37"
Width="47"/>
所以我的问题是为什么 Button3
的 Content
总是 0
而它应该是随机的。
您没有在任何地方调用 GenerateRandomNumber 函数(至少在显示的代码中没有),因此 RandomNumber 属性 将始终具有默认值 0。
以下应该可以解决问题
public sealed partial class MainPage : Page,INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private int __RandomNumber;
public MainPage()
{
this.InitializeComponent();
this.DataContext = this;
this.NavigationCacheMode = NavigationCacheMode.Required;
}
public int RandomNumber
{
get{return _RandomNumber}
set
{
if (_RandomNumber != value){
_RandomNumber = value;
this.OnPropertyChanged("RandomNumber");//needed for binding
}
};
}
public int GenerateRandomNumber(int min, int max)
{
Random random = new Random();
RandomNumber = random.Next(5,40); //changed this line, do the assign
return RandomNumber;
}
private void ButtonNo3(object sender, RoutedEventArgs e)
{
int ans = 0;
Button obj = (Button)sender;
var selectedButton = obj.Content.ToString();
//some more code
GenerateRandomNumber(0,0); //added : generate a random number
}
我用这段代码解决了多个问题。 您永远不会生成随机数,也不会分配它。 您没有实施 inotifypropertychanged,因此即使您生成了一个新号码,它也不会被绑定获取。上面的代码未经测试,可能还有一些问题,但应该能给你一个思路。
如前所述,您没有在任何地方调用 GenerateRandomNumber 方法。需要设置按钮的内容属性为随机数方法返回的值
要每次都获得不同的值,请在点击事件中设置 selectedButton 变量之前放置此代码。
obj.Content = GenerateRandomNumber(5,40);
var selectedButton = obj.Content;
另一个注意事项。 GenerateRandomNumber 方法的参数没有用。你没有使用 them.you 应该这样做:
private int GenerateRandonNumber( int min, int max ) {
Random random = new Random();
return random.Next( min, max );
}