使用类的数据成员绑定UI元素依赖项属性

时间:2011-12-12 04:55:51

标签: silverlight-4.0

我需要将StackPannel中的所有复选框(IsChecked Property)绑定到类中定义的bool值。用我的问题附上我的Xaml,请帮助

                                           

    <!--ContentPanel - place additional content here-->
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <StackPanel Height="287" HorizontalAlignment="Left" Margin="78,65,0,0" Name="stackPanel1" VerticalAlignment="Top" Width="309" DataContext="checkFlag">
            <CheckBox Content="" Height="71" Name="checkBox1" IsChecked="{Binding Path=Binding.MainPage,Source=checkFlag,Mode=TwoWay}"/>
            <CheckBox Content="" Height="71" Name="checkBox2" IsChecked="{Binding Path=Binding.MainPage,Source=checkFlag,Mode=TwoWay}"/>
        </StackPanel>
        <Button Content="Button" Height="72" HorizontalAlignment="Left" Margin="78,400,0,0" Name="button1" VerticalAlignment="Top" Width="160" Click="button1_Click" />
        <Button Content="Button" Height="72" HorizontalAlignment="Left" Margin="227,400,0,0" Name="button2" VerticalAlignment="Top" Width="160" Click="button2_Click" />

在checkFlag的设置/重置时,复选框未获得检查/取消选中。我应该为旗帜或其他东西实施“INotifyPropertyChanged”。同时添加课程,请看看。'

namespace Binding
{
    public partial class MainPage : PhoneApplicationPage
    {
        public bool checkFlag;
        // Constructor
        public MainPage()
        {

            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            checkFlag = true;
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            checkFlag = false;
        }
    }

1 个答案:

答案 0 :(得分:0)

在我看来,您需要实现,正如您所想,INotifyPropertyChanged这里是指向the MSDN documentation的链接

这里有一些演示代码......

public class MyData : INotifyPropertyChanged
{

   public event PropertyChangedEventHandler PropertyChanged;

   protected void RaisePropertyChanged(string property)
   {
      PropertyChangedEventArgs args = new PropertyChangedEventArgs(property);
      var handler = this.PropertyChanged;
      if (handler != null)
      {
      handler(this, args);
      }
   }

   int _someInt = 0;
   public int SomeInt
   {
      get { return _someInt ;}
      set { if ( value == _someInt  ) return;
            _someInt = value;
            RaisePropertyChanged("SomeInt");
          }
   }

   string _someString = string.Empty;
   public string SomeString 
   {
      get { return _someString ;}
      set { if ( value == _someString ) return;
            _someString = value;
            RaisePropertyChanged("SomeString ");
          }
   }

}

设置私有变量,然后为每个要公开的变量添加属性。 在getter中,只需在setter中返回值...,检查值是否已更改,如果是,则指定值并引发属性更改事件。确保您作为字符串传递的名称与属性相同...相同的大小写,相同的拼写等。