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"/>

所以我的问题是为什么 Button3Content 总是 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 );
}