Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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# 如何获取控件的x:Name以在Xamarin表单的ViewModel中使用它?_C#_Xamarin_Xamarin.forms - Fatal编程技术网

C# 如何获取控件的x:Name以在Xamarin表单的ViewModel中使用它?

C# 如何获取控件的x:Name以在Xamarin表单的ViewModel中使用它?,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我正在对一个条目进行自定义控件,我需要获取该条目的x:Name,以便在项目的ViewModel中使用它,以便在使用它时获取光标位置 这是我的代码: 这是我的自定义控件的xaml: 正如@Jason所说,您可以绑定CursorPosition的值 该属性是可绑定的,因此我们可以将其设置为 <Entry CursorPosition="{Binding Position,Mode=TwoWay}" x:Name="

我正在对一个条目进行自定义控件,我需要获取该条目的x:Name,以便在项目的ViewModel中使用它,以便在使用它时获取光标位置

这是我的代码:

这是我的自定义控件的xaml:


正如@Jason所说,您可以绑定CursorPosition的值

该属性是可绑定的,因此我们可以将其设置为

<Entry
            CursorPosition="{Binding Position,Mode=TwoWay}"
            x:Name="EntryControl"
            Margin="45,0,0,0"
            Placeholder="{Binding Source={x:Reference CKEditorView}, Path=Placeholder}"
            Text="{Binding EntryText}"
            WidthRequest="320" />

在视图模型中
public类主视图模型:INotifyPropertyChanged
{
公共ObservableCollection MySource{get;set;}
内部位置;
公共int位置
{
得到
{
返回位置;
}
设置
{
//当我们编辑条目时将调用它
如果(位置!=值)
{
位置=值;
不动产变更(“头寸”);
//做你想做的事
}
}
}
公共主视图模型()
{
}
公共事件属性更改事件处理程序属性更改;
受保护的虚拟void OnPropertyChanged([CallerMemberName]字符串propertyName=null)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(propertyName));
}
}

让虚拟机和视图像这样紧密耦合在一起是不好的MVVM设计。但是,如果您必须这样做,您可以在创建VMI时传递对条目的引用。是否有其他方法来执行我想要的操作?我能在不做不好的练习的情况下得到我的进入位置吗?你还没有解释你实际上想做什么,因为在自定义控件中有一个进入控件。入口控件的属性为“entry.CursorPosition”。获取光标能够在光标所在位置写入文本的位置。我希望能够从viewmodel中使用此属性。然后将该属性绑定到VMI。现在有一个问题,我需要此属性才能在按下光标所在的按钮时放置表情。问题是,当我按下表情符号按钮时,键盘关闭(因此当键盘关闭时,光标被移除)。当我点击屏幕的另一侧时,如何使键盘保持打开状态?我取消删除了帖子,我创建了一个新帖子。
 public class MainViewModel : INotifyPropertyChanged
    {

        public ObservableCollection<Color> MySource { get; set; }


        int position;

        public int Position
        {
            get
            {
                return position;
            }

            set
            {
               // it will been called when we edit the entry
                if(position != value)
                {
                    position = value;
                    OnPropertyChanged("Position");
                    // do some thing you want 
                    
                }
            }
        }

        public MainViewModel()
        {
          

        }
       

        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }