Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#和XAML中的绑定错误_C#_Wpf_Xaml_Visual Studio 2012_Visual Studio 2013 - Fatal编程技术网

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我有很多按钮,它们都有相同的随机值。我想你是在警告我同样的问题,但我无法修复它。