C#和XAML中的绑定错误
我有以下代码,我应该在按钮的C#和XAML中的绑定错误,c#,wpf,xaml,visual-studio-2012,visual-studio-2013,C#,Wpf,Xaml,Visual Studio 2012,Visual Studio 2013,我有以下代码,我应该在按钮的内容中放入一个随机数。但是每次按钮的内容都是相同的值0- 这是我的C#代码的一部分- public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); this.DataContext = this; this.NavigationCac
内容中放入一个随机数。但是每次按钮的内容都是相同的值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"/>
因此,我的问题是为什么按钮3
的内容总是0
当它应该是随机的时。您没有在任何地方调用GeneratorAndomNumber函数(至少没有在显示的代码中),所以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,因此,即使您是生成新编号的用户,绑定也不会拾取该编号。上面的代码未经测试,可能仍有一些问题,但它应该会给您一个想法。如前所述,您不会在任何地方调用GeneratorDomainNumber方法。您需要将按钮的内容属性设置为随机数方法返回的值
要每次获得不同的值,请在单击事件中设置selectedButton变量之前输入此代码
obj.Content = GenerateRandomNumber(5,40);
var selectedButton = obj.Content;
另一方面。GeneratorDomainNumber方法的参数是无用的。您没有使用它们。您应该这样做:
private int GenerateRandonNumber( int min, int max ) {
Random random = new Random();
return random.Next( min, max );
}
更重要的是,他没有将RandomNumber
设置为GenerateRandomNumber
返回的值。您可能应该避免在每次方法调用时创建Random
类的新实例,尤其是如果生成的“Random”数可能会很快被调用。(默认的Random
构造函数是由系统时钟播种的,可能会产生相同的“Random”数。)更好的解决方案是创建一个类级实例,并调用Next(lower,max)
方法。了解更多信息。有关默认构造函数问题的信息,请参阅备注
部分。缺少INotifyPropertyChanged的实现。我加了它。@Cameron我有很多按钮,它们都有相同的随机值。我想你是在警告我同样的问题,但我无法修复它。