ViewController 的 Monotouch UIPickerView ValueChange 事件

Monotouch UIPickerView ValueChange Event for ViewController

我想在 UIPickerView 更改其任何组件中的值时获取事件,以便我的 UIViewController 可以更改 Labels。我只遇到过 PickerView 模型提供的一种有用方法:

public override void Selected(UIPickerView pickerView, nint row, nint component) 

当发生任何变化时,模型中都会反映出相应的变化。但是,如果我想将这些更改反映回 ViewController,我该怎么办?我想像 DelegatesiOS 中那样做这项工作。我对 c# 不是很熟悉。任何帮助表示赞赏。谢谢。

public partial class ViewController : UIViewController  
{

    public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            // Perform any additional setup after loading the view, typically from a nib.
            setupHandlers();
        }

   void setupHandlers()
        {
            pickerModel = new UnitPickerViewModel();
            pickerModel.Items = lengthArray;
            pickerModel.setDataForSecondComponent(lengthArray2);

            pickerView = new UIPickerView();
            pickerView.BackgroundColor = UIColor.LightGray;
            pickerView.DataSource = pickerModel;

        }
}

您可以创建弱和强 Obj-C 风格的代表:

强代表:

在您的UIViewControllerclass:

中创建嵌套UIPickerViewDelegateclass
    class PickerDelegate : UIPickerViewDelegate
    {
        public override void Selected(UIPickerView pickerView, nint row, nint component)
        {
            base.Selected(pickerView, row, component);
            Console.WriteLine(row.ToString());
        }
    }

创建委托并将其分配给您的 UIPickerView:

var picker = new UIPickerView(UIScreen.MainScreen.Bounds);
picker.DataSource = this;
picker.Delegate = new PickerDelegate();

弱代理:

跳过嵌套的 class 并将 UIPicker selected 方法添加到您的 UIViewController 并用 Foundation.Export:

标记
[Export("pickerView:didSelectRow:inComponent:")]
public void Selected(UIPickerView pickerView, nint row, nint component)
{
    Console.WriteLine(row.ToString());
}

将您的 UIViewController 指定为弱代理:

var picker = new UIPickerView(UIScreen.MainScreen.Bounds);
picker.DataSource = this;
picker.WeakDelegate = this;
Add(picker);