How to make a listview work in Xamarin (VS 2022) - xamarin.android

Here's this code. It sort of runs but then abends. How do I make the choice work? And additionally, I wrote (copied) this code about 18 months ago, so I am vague as to why it seems so backward:
void SwitchNumber()
{
var dialogView = LayoutInflater.Inflate(Resource.Layout.list_view, null);
Android.App.AlertDialog alertDialog;
listview = dialogView.FindViewById<ListView>(Resource.Id.listview);
textview = dialogView.FindViewById<TextView>(Resource.Id.textview);
var items = new string[] { "1","2","3" };
var adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, items);
using (var dialog = new Android.App.AlertDialog.Builder(this))
{
listview.Adapter = adapter;
listview.ItemClick += Listview_ItemClick;
dialog.SetTitle("Switch Number");
dialog.SetMessage("Click on the number you want to switch to");
dialog.SetView(dialogView);
string newNumber = string.Empty;
dialog.SetNegativeButton("Cancel", (s, a) => { });
dialog.SetPositiveButton("OK", (s, a) =>
{
switch (prefs.GetInt("selectitemforAlert", 0))
{
case 0:
newNumber = "1";
break;
case 1:
newNumber = "2";
break;
case 2:
newNumber = "3";
break;
default:
currentNumber = "1";
break;
}
}//switch
);
if (newNumber == currentNumber) return;
ChangeNumber(newNumber);
alertDialog = dialog.Create();
// }
}
//using
dialogView.FindViewById<ListView>(Resource.Id.listview).Adapter = adapter;
alertDialog.Show();
listview.Adapter = adapter;
listview.ItemClick += Listview_ItemClick;
}
The list does appear but I get a null object reference.

Related

Parsing serial data from sim900 module esp32

So lately I've been messing around with the idea of making my own cellphone nothing spectacular, just a basic one with touchscreen and basic functions call message calendar contacts list and the ability to connect to the internet and provide weather information via an api call..
The module Im using for gsm and GPRS communications is the popular sim900 module. I can communicate I can make calls I can do everything. But in stuck on a maybe (if not impossible to overcome) difficult roadblock.. You see sim900 module when receives a call transmits through the serial port the "RING" command followed by the "+CLIP.... (caller Id stuff)". OK I'm receiving that and I am breaking it down and accepting the command and all fine it works. But here comes the situation.. I want to read the battery capacity that is left (AT+CBC) and the gsm signal strength (AT+CSQ) all fine I'm sending those 2 commands at a fixed interval of like 3 seconds for the signal 10 for the battery. But now when a call comes it might overlap with the incoming response from trying to read the battery.. Let's say that I asked the module what is the battery level. Then the module will respond by sending "+CBC: (and battery level)" then let's say at the same exact time I receive a call.. Then all the data on the serial port just gets messed up and nothing is working.. My code is pretty rough and definitely the parsing section is awful but I'm more concerned that the parsing is not the problem. And the problem is the conflicting incoming data.. Is there any way of solving this problem? Or any other advice of where to look and how to approach the problem?
Every command from the gsm is delimited by the 0D0A sequence (CRLF)
Bellow is an example code from what i am doing
//for parsing
String incomStr;
String FirstStr;
String SecondStr;
String ThirdStr;
String FourthStr;
String FifthStr;
String SixthStr;
int strcount;
char incomChar;
boolean flagz = false;
//parsing
void getIncomingCommand() {
if (Gsm.available()) {
incomChar = Gsm.read();
//check to see if 0D0A if yes split the string
if ((incomChar == 0x0D) | flagz) {
flagz = true;
if (incomChar == 0x0A) {
switch (strcount) {
case 0:
FirstStr = incomStr;
incomStr = "";
strcount++;
flagz = false;
break;
case 1:
SecondStr = incomStr;
incomStr = "";
strcount++;
flagz = false;
break;
case 2:
ThirdStr = incomStr;
incomStr = "";
strcount++;
flagz = false;
break;
case 3:
FourthStr = incomStr;
incomStr = "";
strcount++;
flagz = false;
break;
case 4:
FifthStr = incomStr;
incomStr = "";
strcount++;
flagz = false;
break;
case 5:
SixthStr = incomStr;
incomStr = "";
strcount++;
flagz = false;
break;
default:
strcount++;
flagz = false;
incomStr = "";
}
}
} else {
incomStr += incomChar;
}
}
}
void clearIncomingCommand() {
FirstStr = "";
SecondStr = "";
ThirdStr = "";
FourthStr = "";
FifthStr = "";
SixthStr = "";
strcount = 0;
}
int getSignalLvl() {
char tempchar;
String tempstr;
Gsm.print("AT+CSQ");
Gsm.write(0x0D);
Gsm.write(0x0A);
delay(180);
while (Gsm.available()) {
tempchar = Gsm.read();
tempstr += tempchar;
}
return tempstr.substring(16, tempstr.indexOf(",")).toInt();
}
String getTime() {
char tempchar;
String tempstr;
Gsm.print("AT+CCLK?");
Gsm.write(0x0D);
Gsm.write(0x0A);
delay(180);
while (Gsm.available()) {
tempchar = Gsm.read();
tempstr += tempchar;
}
return tempstr.substring(tempstr.indexOf(",") + 1, tempstr.lastIndexOf(":"));
}
void setup() {
//start serial port
Serial.begin(115200);
//start the gsm port
Gsm.begin(9600, SERIAL_8N1, 32, 33);
strcount = 0;
updateTime(getTime());
delay(200);
updateSignal(getSignalLvl());
}
void loop() {
//stuff inside here will only be called / run only every X amount of time
// X = SECONDS/1000;
if ((millis() - lastupdate) >= 60000) {
updateTime(getTime());
lastupdate = millis();
}
getIncomingCommand();
if (SecondStr == "RING" & FourthStr.substring(0, 5) == "+CLIP") {
Serial.print("SomeOne is calling!! Number: ");
Serial.println(FourthStr.substring(8, 21));
Serial.println(phoneNums[i]);
Serial.println(FourthStr.substring(8, 21));
callerPhone = FourthStr.substring(8, 21);
clearIncomingCommand();
//important change state only once!
if (!change_state) {
came_from = state ;
change_state = 1;
}
Serial.print("coming from: ");
Serial.println(came_from);
state = 4;
flag = 0;
}
else if (SecondStr == "NO CARRIER") {
Serial.println("CALL ENDED");
clearIncomingCommand();
if (state == 3) {
state = 5;
flag = 0;
} else if (state == 4) {
state = came_from;
flag = 0;
}
change_state = 0;
}
else if (SecondStr == "MO RING") {
Serial.println("CALLING...");
clearIncomingCommand();
}
else if (SecondStr == "MO CONNECTED") {
Serial.println("CALL CONNECTED");
clearIncomingCommand();
if (state == 2) {
state = 3;
flag = 0;
}
} else if (FourthStr == "OK" | ThirdStr == "OK") {
Serial.println("Recieved ok clearing buffers");
clearIncomingCommand();
}
}

How can I play downloaded mp3 files with Xamarin.Forms iOS

I want to play mp3 files with the program that I will perform. I can play the file without downloading the files, but I can not play the file which I downloaded. Can you help me with this?
I am working on the Xamarin.Forms project. I download the mp3 file from the internet via API. But I can not figure out where the downloaded file is specifically registered. I share the codes that I wrote on the IOS layer and on the PCL side with you.
Note: I can check that the download is successful and check the download status.
Note2: I use Xam.Plugins.DownloadManager for the download.
The code that I wrote at the IOS layer.
public void SetDownloadPath()
{
CrossDownloadManager.Current.PathNameForDownloadedFile = new System.Func<IDownloadFile, string>(file =>
{
string fileName = (new NSUrl(file.Url, false)).LastPathComponent;
return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), fileName);
});
}
The code I wrote in ViewModel.
public async Task<DownloadItem> AddBookDownload(BookInfo _bookInfo)
{
var downloadItem = new DownloadItem
{
BookName = _bookInfo.Title,
DownloadID = _bookInfo.ID,
DistinctionCount = _bookInfo.SectionCount
};
var sections = await LibraryClient.GetBookSections(_bookInfo.ID);
downloadItem.Sections = sections.Data;
if (downloadItem.Sections == null || downloadItem.Sections.Count <0)
{
return null;
}
var linkFile =
CrossDownloadManager.Current.CreateDownloadFile(downloadItem.Sections.FirstOrDefault()
?.GetLink()
.ToString());
downloadItem.DownloadedTaskList.Add(linkFile.GetHashCode(), downloadItem);
linkFile.PropertyChanged += (sender, e) =>
{
// Update UI text-fields
var downloadFile = (IDownloadFile) sender;
switch (e.PropertyName)
{
case nameof(IDownloadFile.Status):
Device.BeginInvokeOnMainThread(() =>
{
downloadItem.DownloadState = downloadFile.Status;
Debug.WriteLine("Download Status: " + downloadFile.Status);
});
break;
case nameof(IDownloadFile.StatusDetails):
Device.BeginInvokeOnMainThread(() =>
{
Debug.WriteLine("Download Details: " + downloadFile.StatusDetails);
});
break;
case nameof(IDownloadFile.TotalBytesExpected):
Device.BeginInvokeOnMainThread(() =>
{
Debug.WriteLine("BytesExpected" + downloadFile.TotalBytesExpected);
});
break;
case nameof(IDownloadFile.TotalBytesWritten):
Device.BeginInvokeOnMainThread(() =>
{
Debug.WriteLine("BytesWritten" + downloadFile.TotalBytesWritten);
});
break;
}
// Update UI if download-status changed.
if (e.PropertyName == "Status")
switch (((IDownloadFile) sender).Status)
{
case DownloadFileStatus.COMPLETED:
downloadItem.DownloadState = DownloadFileStatus.COMPLETED;
DistinctionCount = downloadItem.DistinctionCount;
BookName = downloadItem.BookName;
DownloadedBooks.Add(downloadItem);
NativeServices.DownloadService.SaveDownloadsItem(downloadItem);
NativeServices.MediaPlayerService.PlayFromFile(Path.GetFileName(CrossDownloadManager.Current.PathNameForDownloadedFile.ToString()));
Debug.WriteLine("Download Completed");
break;
case DownloadFileStatus.FAILED:
downloadItem.DownloadState = DownloadFileStatus.FAILED;
Debug.WriteLine("Download Failed");
break;
case DownloadFileStatus.CANCELED:
Device.BeginInvokeOnMainThread(() => { Debug.WriteLine("Download Cancelled"); });
break;
}
// Update UI while donwloading.
if (e.PropertyName == "TotalBytesWritten" || e.PropertyName == "TotalBytesExpected")
{
var bytesExpected = ((IDownloadFile) sender).TotalBytesExpected;
var bytesWritten = ((IDownloadFile) sender).TotalBytesWritten;
if (bytesExpected > 0)
{
var percentage = Math.Round(bytesWritten / bytesExpected * 100);
Device.BeginInvokeOnMainThread(() => { Debug.WriteLine("Downloading" + percentage + "%"); });
}
}
};
CrossDownloadManager.Current.Start(linkFile);
return downloadItem;
}
You can find the Audio file Xamrin form sample on below URL :
Audio File Integration Xamarin Forms

Stream file from ftp in localhost working in azure no

Hi I using VisualStudio 2012 and I have created web site which reads info (from .csv) from external ftp site. When I running it on local host everything works fine, but then I deployed it to azure web sites it is not working, just show zeros everywhere were should be numbers. (Dont get info from ftp)
public static List<ApiClient.Models.StatsList> GetStatsData(string Ticket, DateTime start, DateTime end, int CampaignId, String CampaignName)
{
//--------------------------------------------------------------------------------------------------------
//Gets stats from GetAdsStats service (included: Banner id, impressions, and clicks)
//--------------------------------------------------------------------------------------------------------
List<ApiClient.Models.StatsList> FullList = GetAdStatsService.GetAdsStats(Ticket, start, end, CampaignId);
List<LikesDislikesList> LikeDislike = new List<LikesDislikesList>();
//--------------------------------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------------------------------
string day;
string month;
if (DateTime.Today.AddDays(-1).Day.ToString().Count() == 1)
{
day = "0" + DateTime.Today.AddDays(-1).Day;
}
else
{
day = DateTime.Today.AddDays(-1).Day.ToString();
}
if (DateTime.Today.Month.ToString().Count() == 1)
{
month = "0" + DateTime.Today.Month;
}
else
{
month = DateTime.Today.Month.ToString();
}
try
{
string uri = "ftp://siteAdres" + CampaignName.Replace(" ", "_") + "_Optimizing_events_" + day + "-" + month + "-" + DateTime.Today.Year + ".csv";
Uri serverUri = new Uri(uri);
if (serverUri.Scheme != Uri.UriSchemeFtp)
{
return FullList;
}
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
reqFTP.Credentials = new NetworkCredential("username", "password");
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.Proxy = null;
reqFTP.UsePassive = false;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader csvStream = new StreamReader(response.GetResponseStream());
//--------------------------------------------------------------------------------------------------------
//Read Likes/Dislikes from csv file stream
//--------------------------------------------------------------------------------------------------------
using (var rd = csvStream)
{
int iname = -1;
int ilikes = -1;
int idislikes = -1;
while (!rd.EndOfStream)
{
var raw = rd.ReadLine().Split((char)9);
if (rd.Peek() == -1)
{
break;
}
if (ilikes == -1 || idislikes == -1)
{
for (int i = 0; i < raw.Length; i++)
{
if (raw[i] == "Event name")
iname = i;
if (raw[i] == "Custom Event 14")
ilikes = i;
if (raw[i] == "Custom Event 15")
{
idislikes = i;
raw = rd.ReadLine().Split((char)9);
}
}
}
else
{
LikeDislike.Add(new LikesDislikesList() { Likes = Convert.ToInt32(raw[ilikes]), Dislikes = Convert.ToInt32(raw[idislikes]), Name = raw[iname] });
}
}
}
response.Close();
}
catch(Exception ex)
{
log4net.Config.XmlConfigurator.Configure();
log.Warn("GetAdStatsService.cs " + ex);
}
//--------------------------------------------------------------------------------------------------------
//Add like/dislike values for certain banners
//--------------------------------------------------------------------------------------------------------
foreach (var element in FullList)
{
foreach (var el in LikeDislike)
{
if (element.name == el.Name)
{
element.Likes = el.Likes;
element.Dislikes = el.Dislikes;
}
}
}
return FullList;
}
}
}
Check FtpWebResponse.StatusCode before calling response.GetResponseStream(). You are probably having come kind of connection error. My guess would be firewall settings on your Azure VM.

jquery: focus jumps before event runs

The focus moves to the next input field before the event is fired. Can anyone help me find the bug, or figure out how to find it myself?
The goal is to catch the keyup event, verify that it is tab or shift+tab, and then tab as though it were tabbing through a table. When the focus gets to the last input that is visible, the three rows (see fiddle for visual) should move together to reveal hidden inputs. Once to the end of the inputs in that row, the three rows will slide back down to the beginning again, kind of like a carriage return on a typewriter, or tabbing into a different row in a table.
Right now, the tab event is moving just the row that holds the focus, and it is moving it before my script even starts to run. I just need to know why this is happening so that I can research how to resolve it.
Any help you can offer is appreciated. Please let me know if you need more information.
P.S. Using jquery 1.9.1
Link to Fiddle
jQuery(document).ready(function ($) {
// bind listeners to time input fields
//$('.timeBlock').blur(validateHrs);
$('.timeBlock').keyup(function () {
var caller = $(this);
var obj = new LayoutObj(caller);
if (event.keyCode === 9) {
if (event.shiftKey) {
obj.dir = 'prev';
}
obj.navDates();
}
});
// bind listeners to prev/next buttons
$('.previous, .next').on('click', function () {
var str = $(this).attr('class');
var caller = $(this);
var obj = new LayoutObj(caller);
obj.src = 'pg';
if (str === 'previous') {
obj.dir = 'prev';
}
obj.navDates();
});
});
function LayoutObj(input) {
var today = new Date();
var thisMonth = today.getMonth();
var thisDate = today.getDate();
var dateStr = '';
var fullDates = $('.dateNum');
var splitDates = new Array();
this.currIndex = 0; //currIndex defaults to 0
this.todayIndex;
fullDates.each(function (index) {
splitDates[index] = $(this).text().split('/');
});
//traverse the list of dates in the pay period, compare values and stop when/if you find today
for (var i = 0; i < splitDates.length; i++) {
if (thisMonth === (parseInt(splitDates[i][0], 10) - 1) && thisDate === parseInt(splitDates[i][1], 10)) {
thisMonth += 1;
thisMonth += '';
thisDate += '';
if (thisMonth.length < 2) {
dateStr = "0" + thisMonth + "/";
}
else {
dateStr = thisMonth + "/";
}
if (thisDate.length < 2) {
dateStr += "0" + thisDate;
}
else {
dateStr += thisDate;
}
fullDates[i].parentNode.setAttribute('class', 'date today');
this.todayIndex = i;
break;
}
}
//grab all of the lists & the inputs
this.window = $('div.timeViewList');
this.allLists = $('.timeViewList ul');
this.inputs = $('.timeBlock');
//if input`isn't null, set currIndex to match index of caller
if (input !== null) {
this.currIndex = this.inputs.index(input);
}
//else if today is in the pay period, set currIndex to todayIndex
else if (this.todayIndex !== undefined) {
this.currIndex = this.todayIndex;
}
//(else default = 0)
//grab the offsets for the cell, parent, and lists.
this.winOffset = this.window.offset().left;
this.cellOffset = this.inputs.eq(this.currIndex).offset().left;
this.listOffset = this.inputs.offset().left;
//grab the width of a cell, the parent, and lists
this.cellWidth = this.inputs.outerWidth();
this.listWidth = this.inputs.last().offset().left + this.cellWidth - this.inputs.eq(0).offset().left;
this.winWidth = this.window.outerWidth();
//calculate the maximum (left) offset between the lists and the parents
this.offsetMax = (this.listWidth - this.winWidth);
//set default scroll direction as fwd, and default nav as tab
this.dir = 'next';
this.src = 'tab';
//grab the offsets for the cell, parent, and lists.
this.cellOffset = this.inputs.eq(this.currIndex).offset().left;
this.listOffset = this.inputs.eq(0).offset().left;
this.winOffset = this.allLists.parent().offset().left;
//calculate the maximum (left) offset between the lists and the parents
this.offsetMax = (this.listWidth - this.winWidth);
}
LayoutObj.prototype.focusDate = function () {
this.inputs.eq(this.currIndex).focus();
};
LayoutObj.prototype.slideLists = function (num) {
this.listOffset += num;
this.allLists.offset({ left: this.listOffset });
};
LayoutObj.prototype.navDates = function () {
if (!this.inWindow()) {
var slide = 0;
switch (this.src) {
case 'pg':
slide = this.winWidth - this.cellWidth;
break;
case 'tab':
slide = this.cellWidth + 1;
break;
default:
break;
}
if (this.dir === 'next') {
slide = -slide;
}
this.slideLists(slide);
}
this.focusDate();
};
LayoutObj.prototype.inWindow = function () {
//detects if cell intended for focus is visible in the parent div
if ((this.cellOffset > this.winOffset) && ((this.cellOffset + this.cellWidth) < (this.winOffset + this.winWidth))) {
return true;
}
else {
return false;
}
}
All it needed was 'keydown()' instead of 'keyup().'

Set a binding programmatically between a component and a value from a list

I'm developing a application in Silverlight 3 and I have a dynamic form, I generate this form from a list of attributes (key-value) I'd like to know, how can I set a binding between the component (CheckBox, TextBox, ...) and the value of the attribute?
This code is only the first approximation to the solution, no the definitive code:
int numeroFila = 0;
MainPage rootPage = ((App)Application.Current).RootVisual as MainPage;
rootPage.NuevoElementoWindowInstance.NuevoElementoInstance.ListadoAtributos.Children.Clear();
foreach (var atributo in ListaAtributos)
{
string tipoAtributo = ObtenerDefinicionAtributo(atributo.Key);
FrameworkElement campoDatos;
TextBlock bloqueTexto = new TextBlock();
bloqueTexto.Text = atributo.Key;
bloqueTexto.Margin = new Thickness(10,3,0,0);
switch (tipoAtributo)
{
case "Boolean":
CheckBox campoBooleano = new CheckBox();
campoBooleano.Name = atributo.Key;
campoBooleano.IsChecked = ObtenerValorCampoBooleano(atributo.Value);
campoDatos = campoBooleano;
break;
case "DateTime":
DatePicker campoFecha = new DatePicker();
try
{
campoFecha.DisplayDate = DateTime.Parse(atributo.Value);
}
catch (Exception)
{
campoFecha.DisplayDate = DateTime.Now;
}
campoDatos = campoFecha;
break;
default:
TextBox campoTexto = new TextBox();
campoTexto.Text = atributo.Value == null ? "" : atributo.Value;
campoDatos = campoTexto;
break;
}
campoDatos.Margin = new Thickness(0,1,10,1);
rootPage.NuevoElementoWindowInstance.NuevoElementoInstance.ListadoAtributos.RowDefinitions.Add(new RowDefinition());
Grid.SetColumn(campoDatos, 1);
Grid.SetColumn(bloqueTexto, 0);
Grid.SetRow(campoDatos, numeroFila);
Grid.SetRow(bloqueTexto, numeroFila);
rootPage.NuevoElementoWindowInstance.NuevoElementoInstance.ListadoAtributos.Children.Add(bloqueTexto);
rootPage.NuevoElementoWindowInstance.NuevoElementoInstance.ListadoAtributos.Children.Add(campoDatos);
numeroFila++;
}
}
I have found the solution. This is the code:
int numeroFila = 0;
MainPage rootPage = ((App)Application.Current).RootVisual as MainPage;
rootPage.NuevoElementoWindowInstance.NuevoElementoInstance.ListadoAtributos.Children.Clear();
foreach (var atributo in ListaAtributos)
{
string tipoAtributo = ObtenerDefinicionAtributo(atributo.Key);
FrameworkElement campoDatos;
TextBlock bloqueTexto = new TextBlock();
bloqueTexto.Margin = new Thickness(10,3,0,0);
Binding bind = new Binding();
bind.Source = atributo;
bind.Path = new PropertyPath("Key");
bind.Mode = System.Windows.Data.BindingMode.TwoWay;
bloqueTexto.SetBinding(TextBlock.TextProperty, bind);
switch (tipoAtributo)
{
case "Boolean":
CheckBox campoBooleano = new CheckBox();
campoBooleano.Name = atributo.Key;
campoBooleano.IsChecked = ObtenerValorCampoBooleano(atributo.Value);
bind = new Binding();
bind.Source = atributo;
bind.Path = new PropertyPath("Value");
bind.Mode = System.Windows.Data.BindingMode.TwoWay;
campoBooleano.SetBinding(CheckBox.IsCheckedProperty, bind);
campoDatos = campoBooleano;
break;
case "DateTime":
DatePicker campoFecha = new DatePicker();
try
{
campoFecha.DisplayDate = DateTime.Parse(atributo.Value);
}
catch (Exception)
{
campoFecha.DisplayDate = DateTime.Now;
}
bind = new Binding();
bind.Source = atributo;
bind.Path = new PropertyPath("Value");
bind.Mode = System.Windows.Data.BindingMode.TwoWay;
campoFecha.SetBinding(DatePicker.TextProperty, bind);
campoDatos = campoFecha;
break;
default:
TextBox campoTexto = new TextBox();
atributo.Value = atributo.Value == null ? "" : atributo.Value;
bind = new Binding();
bind.Source = atributo;
bind.Path = new PropertyPath("Value");
bind.Mode = System.Windows.Data.BindingMode.TwoWay;
campoTexto.SetBinding(TextBox.TextProperty, bind);
campoDatos = campoTexto;
break;
}
//this.GetType().GetProperty("").GetGetMethod().Invoke(new Object(), null);
campoDatos.Margin = new Thickness(0,1,10,1);
rootPage.NuevoElementoWindowInstance.NuevoElementoInstance.ListadoAtributos.RowDefinitions.Add(new RowDefinition());
Grid.SetColumn(campoDatos, 1);
Grid.SetColumn(bloqueTexto, 0);
Grid.SetRow(campoDatos, numeroFila);
Grid.SetRow(bloqueTexto, numeroFila);
rootPage.NuevoElementoWindowInstance.NuevoElementoInstance.ListadoAtributos.Children.Add(bloqueTexto);
rootPage.NuevoElementoWindowInstance.NuevoElementoInstance.ListadoAtributos.Children.Add(campoDatos);
numeroFila++;
}
However now, I need to set a Converter to the CheckBox, because al "Values" are string and I need to convert string-boolean

Resources