C# 如何获取控件的x:Name以在Xamarin表单的ViewModel中使用它?
我正在对一个条目进行自定义控件,我需要获取该条目的x:Name,以便在项目的ViewModel中使用它,以便在使用它时获取光标位置 这是我的代码: 这是我的自定义控件的xaml: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="
正如@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));
}
}