अद्यतन: बस एक चेतावनी है, इस पर एक 500 अंक बोनस है कि अगर किसी को सिर्फ मुझे बताएंगे कि कैसे जेस्चर का उपयोग किए बिना इस कार्यक्षमता को लागू कर सकते हैं>मैं व्यूसेल के टैप किए गए ईवेंट को एक सामान्य फ़ंक्शन पर एक param भेज सकता हूं और उसके बाद उस व्यूसेल तत्व के लिए एक पिकर खोल सकता हूं?
मैं एक पिकर को खोलने के लिए एक ViewCell और एक इशारा पहचानकर्ता उपयोग कर रहा हूँ निम्नलिखित कोड के साथ। व्यूसेल में बाईं ओर एक लेबल और दाईं ओर एक लेबल क्षेत्र है जो ऐप शुरू होता है और बाद में पिकर के साथ जब व्यूसेल क्लिक किया जाता है।
XAML
<ViewCell x:Name="ati" Tapped="OpenPickerCommand">
<Grid VerticalOptions="CenterAndExpand" Padding="20, 0">
<Grid.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding OpenPickerCommand}"
CommandParameter="{x:Reference atiPicker}" NumberOfTapsRequired="1" />
</Grid.GestureRecognizers>
<local:LabelBodyRendererClass Text="Answer Time Interval" HorizontalOptions="StartAndExpand" />
<Picker x:Name="atiPicker" IsVisible="false" HorizontalOptions="End" SelectedIndexChanged="atiPickerSelectedIndexChanged" ItemsSource="{Binding Times}"></Picker>
<local:LabelBodyRendererClass x:Name="atiLabel" HorizontalOptions="End"/>
</Grid>
</ViewCell>
<ViewCell x:Name="pti" Tapped="OpenPickerCommand">
<Grid VerticalOptions="CenterAndExpand" Padding="20, 0">
<Grid.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding OpenPickerCommand}"
CommandParameter="{x:Reference ptiPicker}" NumberOfTapsRequired="1" />
</Grid.GestureRecognizers>
<local:LabelBodyRendererClass Text="Phrase Time Interval" HorizontalOptions="StartAndExpand" />
<Picker x:Name="ptiPicker" IsVisible="false" HorizontalOptions="End" SelectedIndexChanged="ptiPickerSelectedIndexChanged" ItemsSource="{Binding Times}"></Picker>
<local:LabelBodyRendererClass x:Name="ptiLabel" HorizontalOptions="End"/>
</Grid>
</ViewCell>
सी # यह CommandParameter
public SettingsPage()
{
InitializeComponent();
BindingContext = new CommandViewModel();
}
void atiPickerSelectedIndexChanged(object sender, EventArgs e)
{
var picker = (Picker)sender;
int selectedIndex = picker.SelectedIndex;
if (selectedIndex != -1)
{
App.DB.UpdateIntSetting(Settings.Ati, selectedIndex);
atiLabel.Text = AS.ati.Text();
}
}
void ptiPickerSelectedIndexChanged(object sender, EventArgs e)
{
var picker = (Picker)sender;
int selectedIndex = picker.SelectedIndex;
if (selectedIndex != -1)
{
App.DB.UpdateIntSetting(Settings.Pti, selectedIndex);
ptiLabel.Text = AS.pti.Text();
}
}
public class CommandViewModel: ObservableProperty
{
public ICommand openPickerCommand;
public CommandViewModel()
{
openPickerCommand = new Command<Picker>(PickerFocus);
//openPickerCommand = new Command(tapped);
}
public ICommand OpenPickerCommand
{
get { return openPickerCommand; }
}
void PickerFocus(Picker param)
{
param.Focus();
}
}
मैं TapGestureRecognizers के उपयोग निकालना चाहते हैं, लेकिन मैं के साथ विभिन्न पिकर (अति, BTI, PTI आदि) के लिए काम करता है अभी भी कार्यक्षमता और लेआउट बनाए रखना चाहते हैं।
यह मेरे लिए सुझाव दिया गया है कि यह बेहतर होगा कि मैं इस तरह ViewCell के टेप घटना प्रयोग किया है:
Tapped="OnTapped"
कोई कुछ विस्तार से व्याख्या कर सकते हैं कि कैसे मैं इस सी # में तार कर सकता है। क्या मैं कमांडव्यू मॉडेल के साथ-साथ सी # बैकिंग कोड में कुछ कोड करने के लिए सबसे अच्छा होगा। क्या दृश्य मॉडल में एक विधि है जो तर्क लेती है ताकि इसका उपयोग विभिन्न पिकर्स खोलने के लिए किया जा सके?
मैं यह कैसे कर सकता हूं इसका एक उदाहरण बहुत सराहना की जाएगी। ध्यान दें कि मुझे विशेष रूप से CommandViewModel का उपयोग करने की आवश्यकता नहीं है यदि कोई तरीका है कि मैं इसे .cs बैकिंग कोड में कोडिंग करके कर सकता हूं।
आपको यहां विस्तृत विवरण मिला है https://stackoverflow.com/questions/45366457/can-i-use-c-sharp-code-to-add-a-call-to-a-command-instead-of -ए-ग्रिड-जेस्टरेरेको आप और क्या देख रहे हैं? –
हाय @ समंथा जे! क्या आप व्यूसेल क्लास के लिए सी # कोड-पीछे साझा कर सकते हैं? –
मैंने पहले से ही सभी कोड –