绑定C#和XAML错误

时间:2015-02-13 20:25:21

标签: c# wpf xaml visual-studio-2012 visual-studio-2013

我有以下代码,我应该在按钮的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"/>

所以我的问题是为什么Content的{​​{1}}总是Button3应该是随机的。{/ p>

3 个答案:

答案 0 :(得分:3)

您没有在任何地方调用GenerateRandomNumber函数(至少在所示代码中没有),因此RandomNumber属性将始终具有默认值0。

答案 1 :(得分:1)

以下应该做的伎俩

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所以即使你是生成一个新的数字,它也不会被绑定拾取。上面的代码没有经过测试,可能还有一些问题,但它应该给你一个想法。

答案 2 :(得分:0)

如前所述,您并未在任何地方调用GenerateRandomNumber方法。您需要将按钮的content属性设置为随机数方法返回的值。

要在click事件中设置selectedButton变量之前每次都输入不同的值。

obj.Content = GenerateRandomNumber(5,40);
var selectedButton = obj.Content;

另一方面。 GenerateRandomNumber方法的参数是无用的。你没有使用它们。你应该这样做:

private int GenerateRandonNumber( int min, int max ) {
    Random random = new Random();
    return random.Next( min, max );
}