Hello dear students, welcome to the lecture 8 of Introduction to Programming with C Sharp course. So, I am going to start a new project as usual. So, this week we are going to see checkboxes, radio buttons, list boxes, file stream, using list reversal, panels and more. Okay, so let's create a new project as usual. Okay, vpf.net core. Okay, and user-defined classes, we have made entrance to this already. Okay, so these things will start to make sense to you more and more with each lesson as we progress. However, as I said previously, please write the code yourself at home. Okay, not just copy-paste from my uploaded code. That will help you tremendously. So, okay, I will start with showing you how to use panels. So, to use panels, I will use techpanel. Okay, this is the vpf control. So, I have just dragged it from here to here. Okay, it is added like this. However, currently it doesn't have any width or height. Therefore, I have to change it myself. This should be good enough. So, when I click this, I think it is currently selected and it is taking the full space. Okay, so inside techpanel, it has added another panel, which I don't need right now. So, let's check its properties. I think there is width, let's say 200 pixels and height, let's say 200 pixels again. Okay, so you see the panel is now visible like this. I have added width and height. I am going to move it to like this. Okay, so what does techpanel do? Let's check that. Okay. Okay, so as you can see, it is more about rendering and position of the elements. So, today we are going to see the radio buttons and checkboxes as well. So, radio buttons can be used as a group. Okay, so I am going to add multiple radio buttons and let only one of them be chosen at a time. So, I am adding them like this, as you can see. So, you see they are getting vertically aligned from top to bottom. I can change their features as well. Okay, so let's say you have multiple options and you want only one of them to be chosen by the user. To do that, we can achieve that like this. Let's say our choices can be authority level. Okay, so I am going to make them such as how to make it. Okay, I am going to make them as rebuser. Okay, radio button user. And let's say give the name as reweb student. I will make it as guest. Guest student. And let's make this as lecturer. And let's make this as admin. Okay. So, let's run the application and see the behavior of them. By default, I should be able to select only one of them. Yes, it is like that as you can see. I am able to select only one of them because now these are as a group. Okay. I'm going to get some more. Let's say properties to this stack panel. What can we do? We can, I think, add user orientation. Make them like this or this. Okay. Maybe we can add some heading. I don't know if there is heading or not. Okay, there is background as well. Let's add a background from here, for example. Okay, like this. Or it can be gradient as well. Okay, and let's change opacity is fine. Okay, this is fine. Let's change the font. Okay, there is automation, transformation, and scaliness. Okay, I wonder if there is a padding option. Okay, border padding. Okay, this is interesting. Let's try this feature. So padding should let us have. Okay. Oh, it didn't work as I wanted. So what I want to achieve is having padding of elements inside. This is not working as expected. Okay, so there is margin. Events. Oh, I see, this makes sense. Let's try this. So what I'm going to add is I'm going to move to the XML window fully like this. I'm adding stack panel resources and type will be radio button. And this will give me a margin of, I think, x-axis. I will make it x and y-axis. Let's make it everywhere like this. Okay, let's try this. And let's return to design. Okay, now you see these elements are not as before. They have now spaced out evenly with 10 pixels. We have achieved it with adding margin to these elements, each of them, but not by one. We have used a target type with x type equal to radio button. I didn't know this previously. I just did it from checking the Internet. This is how we do the things. Okay, so you see now they are having 10 margin. Okay, it is like as we want. Okay, so now I can add also a button inside this. However, it will also get to the very top, very bottom like this and bottom. Let's make this a bit bigger. So you see this extremely useful for styling and grouping our objects. Okay, and I'm going to set this button as. Let's give it a name and some features. Okay. And let's say go selected. Okay, and when we run it, currently no option is being selected, as you can see. I can select one of them. No, this selection is possible. So let's add a click event to this button. But then I'm going to switch. Switch will not work. I will take something. Okay, content. Okay, it seems like we can put the same name to all of them. Okay, there's also a group name. Okay, so to be able to see which one of them selected, we need to add them. Group name. Okay, let's first make them with the regular way. So this is not the appropriate way, but I will just show you. What, how to make it. Let's name this. Message. Let's make it a string. So this is a method that takes no parameters and it will return a string. I'm going to make it like this. If the guest is selected, it is enabled. Not enabled. It's checked. Okay, it's checked. It is the correct parameter. Message will be equal to. And. Okay, it seems like we have to explicitly let it. No, because this is both get and settle. That means you can either get or set. Therefore, we have explicitly, we have to explicitly tell the compiler that it is get. By get, what I mean, currently with this equality, it uses get method to check the status of, to check if it's true or not. Let's make this student selected. And let's make. Okay, what if nothing is selected? I can check that by two methodology here. I can use if string is null or empty method and show message equal to. Which means that if this string is empty or null, this will work. Alternatively, I can use this alternatively if the length of show message is smaller than one. So the length gets the number of characters in the current string, which is zero characters at the moment. And if none of the radio buttons is selected, these will work. However, there is a crucial difference. Let's say if this is null. This will throw you an error. If the string is null, this below method will throw an unhandled error. Let me show you. It wants me to return a message. I will show you each case so you will understand better. So currently, my string is null. Okay. And I didn't select any of the options. So I click this. And we haven't called this by the way. We have to call it like this. I'm restarting the application. So this is the method call. It doesn't take any parameters. It will return a string. However, I don't have to assign return value to anything. Okay. Okay. So I am currently doing a debug. So none of the radio buttons is selected. So you see this is check it false. It's check it false. It's check it false. It's check it false. Therefore, the string is currently null. And if string is null or empty, which is true, you see it gets into the inside of if. And here, now it will throw me an error. It says trap an exception of type system null reference exception. So when I continue, object reference not to set an instance of object. So strings are object types. However, they are immutable. Therefore, since this is null, I am not able to use length method because it is null. So I can use this method or I can add a null check, which is a feature of newer generation C sharp. So this will ensure that this question mark will ensure that the right path of the length is only check it if this object is not null. I will just copy paste to not confuse you. So I'm going to make this comment. Say. This length is actually a method that returns or let's say rather than method, it is a property of a string that returns the length of the string. You see, it's it says that the number of characters in the current string returns. So this will not throw an error. Let's try it. This will not get inside of the if though. OK, so this will not work because our string is currently null. Therefore, it will not get inside of it. You see, it didn't get inside of it. So if string is null, this will not execute it. Let's show it like. OK, and here. So this question mark is called as let me find it for you. OK, it is called as let's check. OK, this is an operator. It is a no coalescing operator or something like that. Yeah. There's also this one. Oh, I have shown you this, I think. So let's see the English of this page. And these are operators. I think there is no forgiving operator. Oh, this is C sharp eight features. Oh, interesting. I have never used this one. Not what we want. Maybe this is. Interrelated. It is called as no conditional operator. Yes, so it is called as member of access operators and expressions. So you see, it is showing that dot to access nested namespace within a nested namespace. That is how we call methods or properties index operator like this. Indexer access other usages of index. OK, no conditional operator here. So this is called as no conditional operator. OK, so it says that available in C sharp six and later a null conditional operator applies a member access or element access operation to its operand only if that operand evaluates to non null. Otherwise, it returns null. That is. If it evaluates to null, the result of a X or a X is null. If it evaluates to non null, the result of a X or a X is the same as the result of a X or a X, respectively. So this is a null check and it prevents null reference exception like we had in our example. OK, so if none of the radio buttons is checked, I will check one of the radio buttons randomly and recall this method. OK, so let's do that inside here. And how am I going to do that is I'm going to add it here. Let's add it to the bottom. And how am I going to do that is so easy. Let me show you. I am going to generate a list of radio buttons like this. List and. Here I will assign my buttons. To this list. Like this. So this will only get this list will only hold their references, addresses, therefore, whatever the changes I make, the elements of this list will affect this because these are the elements of this list is actually these objects. OK, and let's pick a random number. And generator. Next, it will be minimum. You see there are. Overloading, so it will be minimum zero and the maximum value will be equal to. Number of elements. OK, so this will generate numbers between minimum and less than maximum. You see it will be greater or equal to minimum. So it can be zero and it will be less than maximum. So it won't be equal to number of four. Because this list has four elements and therefore the maximum number it will return will be equal to three. OK. And I will make. The index. Of this. Is check it through and I will call this method again. So I'm going to remove this message boxes like this. OK. And. This will never be executed anyway. And it will return show message. So. Oh, but by the way, this way we won't be seeing. The first no selected. OK, I'm going to first remove this so we can test it out. OK, let's run the application. If you don't understand what is happening, always put a breakpoint and execute the application step by step, which is I am going to do right now to show you. So at first I didn't select any radio buttons and I'm just picking the show selected option. It is starting from here. So nothing, none of them is selected. And I generate a list. Currently my list holds references to these radio buttons, as you can see. So I can access these radio buttons with an index. It is what it does. I could use their name. However, I am using their references inside the list. Therefore, it is easier for me to modify them. OK. So if it is null or empty, it is null or empty currently. And it will return the message. So the message box will show me no radio button is selected is null or empty method. Then what I am going to do is. Oh, I can use another methodology right now, since I have made I have added them to a list I can use like this. Select, let's say, or. Yeah, we can use select. And I will use a link queue here. This is a link queue expression, which is shown here. Lambda expression. You can read about lambda more here. OK, let's let's read it. Actually. Let me add this to our source code. Let's read it. We are using expression lambda. Any lambda expression can be converted to a delegate type. The delegate type to which a lambda expression can be converted is defined by the types of its parameters and return value. If a lambda expression doesn't return a value, it can be converted to one of the action delegate types. Otherwise, it can be converted to one of the func delegate types. For example, a lambda expression that has two parameters and returns no value can be converted to an action less than T1, T2 greater than delegate. A lambda expression that has one parameter and returns a value can be converted to a func less than T, T result greater than delegate. In the following example, the lambda expression X equals greater than X asterisk X, which specifies a parameter that's named X and returns the value of X squared is assigned to a variable of a delegate type. You will understand lambda expressions as we use them. So this means that by PR, you can give any name to it. It is parameters. So in this case, it is the radio button. This means that on the right side of the lambda expression, it will check each one of them. Okay, and if they are true, I will get them to a array like this, and I will get the length of the array. And if it is equal to zero, that means that none of the radio buttons is selected. This is this single line of code is equal to actually this. Okay, I will show you the other way as well. So it's equal to zero. What I'm going to do is So this, you see this is how many lines it is six lines of code is equal to this. Actually, there is also this one. So it is seven lines of code. So which lines here. So all of this is written inside single line of code here. It is saying they are saying, however, this is more efficient way to do it. And by the way, if this is true, now it will enter inside this if statement as well. By the way, I will add some comment here so you will understand one, two, three, four, five, six, and seven. So these seven lines of code is written in a single line of code. Okay. So I have put a breakpoint here. I'm going to remove this. And I'm going to click the show. So you see it is zero already, but it will be executed here as well. So if it is now inside, if I will generate a random generator, I will generate a random number here. And my random number is one. Therefore, which one of the radio button will be modified? The second, which is student, I believe. Okay, no radio button selected is not empty. And now student is selected randomly. And when I click, you see student account is selected. Now I can select one of them as I want. And I can show that. Okay. I can also add a clear selection button like this. And to do that, what I'm going to do is I will take this list at an upper level like here. So this list will be available to all elements inside this class. However, it says a field initializer cannot replace non-static fields. Therefore, what I need to do is I need to call it after the const vector. And. So you see it says initialize component and then I am going to do my list initialization that way. Now I can access this list inside every one of the methods or classes written in this scope in the scope of this class. Okay. So I can now add another button to clear the selection. By the way, I am going to. You see, this is added randomly. I'm going to remove them and see this as well. What I'm going to add is there is a button. Maybe can we add like this? I don't know if this will work or not. Maybe like this. Okay, someone has already asked the question. Hmm. Okay, so let's apply this methodology. And it's type button in this case and based on says common style. Let's make let's give it a name. And clear selection. Let's create a new event. Let's create a new event. Hmm. Hmm. It won't allow me to do this because they are different type. Therefore, I have to copy and paste this like. Let's try it. Okay, it says you have already key. So it comes to key R and key B. Okay, let's run the application. This header property is gone right now. And why is that? Maybe because of key. Let's remove the key. Now it works. And now I have to make my stack panel bigger. I will also change the style of these buttons from here. And they will be applied to also set the property margin and let's add another set of property. It should automatically have font size. Okay, let's say 15. I could also make this by one line, but I will show you. By the way, you see you can close the setter like this or like this. Both is fine. So this will be applied to all radio buttons and the value font size will be 15. Okay, as you can see now they are bigger. However, I could also use the set it like this from here. When I click here, my computer is a bit slow right now. Font size equal to 20. I could also set each one of these properties like this. However, it would be not as efficient as like this modifying all of them. So this should override the previous value, I think. Okay, so you see now admin has bigger font size. The others are still fine. And let's set the font size of the button as well. I will make the buttons 16. Let's run it. Yes, now they're bigger. Okay, let's make the clear selection. So with clear selection, what we are going to do is we will do for each inside our list, which is now available to this method call as well, because it is defined here. Therefore, it will be available to all methods and classes defined inside this scope. Okay, so it is about scope level. So if they are at the same scope level, let's call this the scope level 0, 0 and scope level 1, 1. And so since scope level 1, it will be available to all scope level 1. This is also scope level 1. And this was scope level 1, scope level 1. So you see now this is being scope level 2. Why? Because it is inside scope level 1. Therefore, it can access to all lower scope level elements, which are scope level 1 methods or scope level 1 properties and attributes, fields, whatever there are. So it is about your scope level. However, if there being another scope level here, it becomes now a local variable. What I mean is something I will define here. So this will be available to only within this scope. You see it is a local variable because it is defined inside a method. However, this is defined inside a class. Therefore, it is field. Okay, so these are differences. So because this is defined inside this scope, it can be used all the below scopes like here. Let's say I can define a class here, class MyTemp equal to like this. I can define another scope here. And I can. Okay, it has broken my scope. Okay, it appears that we are not able to define a class inside constructor, I think. Can I define it here? So classes can be defined only inside other classes, it appears that. However, I can define a class here. And now inside this, this is scope level 1. I can define another class. Okay, not get confused, I'm going to delete this. You will understand it as you use. And so this will be a radio button. And is checked equal to false. This is same as this for each is same as writing each one of the radio buttons is checked equal to false. Okay. So, but if there are 100 radio buttons, you have to write every one of their names, which is an efficient way of doing radio buttons. Okay. So, so this is the same as this one. However, you see this is very dynamic. You should always try to dynamically code your program, okay, which is much more efficient. And I can increase the number of radio buttons here as many as I want. And so I wouldn't be need to write each one of their names if I use the list method. Okay. So let's run the application and see if it is working or not. Okay. Clear selection. Now clear it. And now randomly one of them is selected. Clear it. Okay, clear it. You see guest one is selected. Clear it. This one, this one. You see admin is selected and such. Okay. So an alternative way would be for increasing our dynamic naming. We can add a group name to radio buttons. Okay. So I will tell them as rebis user levels. Okay. Like this. So I will put each one of them as a group name. And okay. Now, instead of accessing them by name by name. Now I can use their group name. How can I do that? How can I do that? So. Proper way. Message. This time I will eliminate all the radio buttons which are part of a group name. Okay. Okay. Okay. Okay. This is the lame way, as you can see. Okay. Here. This is the way. Find this chandence. So what is our window name? Main window. And find this chandence. It doesn't have find chandence. Let's use this. Does it have? Find name. Okay. It was like this. Maybe. Let's try this way. Okay. This doesn't work. Controls doesn't exist in the VPF. So it is Vipon. I need to find VPF version. And this is the sender method. This works. I will try this. Okay. It looks really advanced, I think. Okay. This is the way it is. So my container. Oh, it doesn't contain containers. Yeah. Okay. This looks pretty advanced. Therefore, it looks like it is hard to achieve in VPF. Okay. It looks like we have to use an extension. Otherwise, it is not possible in VPF. So I am not sure if this will work or not. Okay. To be able to use this, I am going to add. Using static.lectures.paint Okay. Now it works. Okay. There is a group name. Okay. Nice. Now it works. Equal to. I'm going to generate another radio button list. Now I have generated my list. I will, I'm going to put it here. So instead of defining their names by one by one, I can use this method. By the way, to do that, let's compose another radio button list. This time I will put them like this without using a stack panel and you will see the difference. You see now that now they are not getting automatically positioned. Okay. And now all of them will be ungrouped. Therefore, they will be used in that particular score. What I mean is, let me show one moment. Let's return your message for now. Okay. You see now they are not grouped. If I want to group these ones, like these two is as a group and these two as a group, I have to give them a group name and or put them inside different stack panel. So I will give them a group. And by the way, I can, I can, I should also give this a value as a value. What was the name of the value here? Okay. Okay. Datacontext. I think it is this one or something like this. Datacontext. So datacontext is a property. And let's make the guest. I will use the datacontext for these new ones. So these new ones, let's make them like, let's give them some random scores. Okay. So, so let's make this one score as 100 or 50. So the content of this will be BD. Okay. And give it a group name. Let's make scores of letters. Let's copy and paste this like this. Group name. Content AA. Datacontext will be 100. And let's give these two different, something different. So let's say letters of scores. Scores group name. So content will be 50. Datacontext will be DD this time. Okay. This looks good. AA 100. Let's run the application. Now I should be able to select each one of the elements. I mean, one element inside at each group. So I can select use. Okay. I can select 100 and I can select DD and I can select lecture because now all of these radio buttons belong to different groups. Okay. So radio button is about selecting single option from a group of options. It is what is, it is what is used for. Okay. Now I am going to dynamically add them to the list. I haven't given them custom names to access them manually. They only have group names. Okay. One moment. So let's continue. Okay. Let's name them as scores of letters and letters of scores. Scopes. So, so scores of letters here and letters of scores here. And the group names are as scores of letters. You see, I didn't give them any name to access the specific radio button. Therefore, I can generate hundreds of different radio buttons and I can add all of them at once to my list like this. And I will also read their values. So now that I have their lists generated, I can show us like this. Letters of scopes, button and go to true. Content plus over and over and plus data context. Let's name it as the. Okay. And I am going to use this as at range. And with at range, I will add the other one as well. So with one for each loop, now I will. Oh, I don't need to do anything. Perhaps. Hmm. Leave this radio button. I will show another interesting thing. At range. Okay. It doesn't work. This is really interesting. Maybe we should make it like this. Okay. Oh, no, it doesn't work. Okay. So I have to write it like this. So I have composed a new list from the existing lists and added them together. So with only single for each. Now I will look all radio buttons. Okay, let's run the application and we haven't added a call for this one. So this method has zero references. I will add a new button to call this. So the basic idea of radio buttons are grouping and letting user to select only one of the possible options. Okay. Hmm. Okay. Click. Okay, I can call the method like this because this method will return a string. Therefore, here there will be a string. Okay. So the result of this method call will be passed to the message box show method. Okay. So I can use it like this as well. Okay, when I click. It says it is null. It appears that our method didn't work. Why? Let's find it out. So we had a problem here, apparently. So, okay. Okay. The problem is that our findVisualChildren method returns nothing. It is null. It didn't enter inside this for each loop. So when I click step into, you will see that it will find no object. Okay. Hmm. So our iteration method didn't work. This object is our main window. I can visualize it. Let's see if we can find the children here. I'm trying to find if there is somewhere available the children. Okay, it is not null. However, it can't get the children. Okay, Visual Tree Helper. Hmm. Why Visual Tree Helper is not working? Because Visual Tree Helper is a method of Windows Media. However, we are using VPF. Okay, so this looks a better methodology. And I will replace this method. There is spider, child name. Hmm. This is interesting. Maybe we can use this. Rather than using X name. Let me check this. I wonder if this will work. Find name. Yeah, it looks like working. Maybe find resource from Visual Ancestors. Name group name. Hmm. Good one, but ensure control is loaded. Otherwise, it seems like we had to have control table loaded. Therefore, it appears that our call order is incorrect. So after public window is executed, we have to call it, I think. Yes, still error. So. Hmm. Let's call it inside here. This should still initialize it. However, it will initialize it every time when we click. So we will add a solution for it as well. But I have to be sure that it works. Okay, now it did find the radio button. However, now. Okay, okay, now it works. Okay. Okay, it appears that user control visible changed. Oh, this is a nice thing. Yeah, but it is really complex for you. Therefore, I will make it like this if square letters equal to null. Okay. So this will be only entered once as many without depending on how many times we click the button. It will initialize the list like this and that. Okay. So when I click the show button, there is a better way to but it becomes even more complex and harder to understand. They are about events handling. I am not going to show that right now. So when I click this button, it will check that this list is null or not. Since it is null at the beginning, it is not initialized. It will enter inside this if scope. It will initialize the list as empty list. Then it will iterate through to all radio buttons and add them to the list if they are their group name is these ones. You see the first iterated radio button is RBS user levels, which is this group. We have defined it here. So you see it is starting from here and continuing and it will add all of them to the list. So you see it did print empty because none of them is chosen. When I click again, now this will not be entered because it is not anymore null. It is initialized. You see now it will continue as expected. And let's delete this breakpoint and I will select 100. So it should show me the content of the selected button is 100. Yes. And the value of the selected radio button is AA and the other one is null. So I will select this one. Okay. And it will show the content of the selected button AA. The value of the radio button is 100. Okay. To remove the confusion, let's modify the program a bit more. So let's make this as CC and content 60 and let's make this BB and content 70. And if message is null, we will display another message on the message box. Let me show you. Let's check it through. Okay. So here we are showing extra time. So I'm going to remove this like this. Okay. And okay. So if the message is null, I will set it a default value. So let's say okay. Now we should work better. Okay. Okay. When I click, it will say no radio button is selected. When I select 70, it will tell me that the content of the selected button is 70. The value of the selected radio button is BB. And I'm going to select this one. It will tell me that the content of the selected button is DD. The value of the selected radio button is 50. It should iterate both of them though. Interesting. Oh, it only shows only the one of them. Why? Because only one message is returned back. Therefore, what I need to do is plus equal and at the end, I am going to add some lines like this. Let's run it again. Okay. I click it. It says no radio button is selected. I only select this. It says no radio button is selected. The content of the selected button is 70. When I select it like this, it shows like this. So you see it becomes confusing. So I'm going to return a list instead of a string and I will change this to a list. It will be empty and this time we will add message to the list like this and if list is empty zero, we will add a message to the list and return messages. Okay. And now you see this message box will not work anymore. What we are going to do is this will return a list this time message and let's run it. Okay. Now it should work as expected properly. I'm clicking no radio button is selected. The content of the selected button is 70 and you see now it is all working and the good thing is I can add many other radio buttons. Okay. Like this. Let me show you. So let's copy and paste them. I have copied and pasted it. I have copied and pasted it. I have copied and pasted it and I don't need to change anything. Okay. I can copy and paste as many as buttons. I want this. Okay. And I only need to modify the related values the XML code here. So give them whatever the value I want. I'm going to do it like 99, 95 AA1, AA2, 93 AA3 and let's give them 21, 71, 77 and 81 and 85. You see now it can be done in a dynamic way. Therefore it is working much better. However, since I am not using any back panel, I have to set the position myself. You see now I can make it like that. It is working and I didn't have to change any of the background code because I have made them dynamically to get assigned to get used. Therefore it is working without a changing code at the background. I think now you get the idea of radio buttons and stack panels. Okay. And so the lesson is getting more. I will show you the checkboxes. So with radio buttons we are letting user to select only single option out of multiple options. Okay. What if we want to let users to select more than one option at a time? What if we want that? You see this is a bad design right now. What I am doing is a bad user interface design, but I'm just doing it to show you right now. So with checkboxes we can let users to check multiple options. Okay. Okay. Okay. I have added three checkboxes and we can give them a data context. So the first one will be let's say 50 or we can write them as lecture names, maybe lecture course. 250 and let's say content will be object oriented programming. I'm going to remove this. Okay. And what was the cause of the introduction to programming? Okay. And let's copy and paste this. Let's make this as an and let's add another one. I say 307. Okay. Now we can let users or students to pick the lessons he's getting. Okay. Since they are lesson, they can select multiple. By the way, I am going to add a stack panel to make them better. So let's modify this with 100 bits. Okay. Now the stack panel is visible for me to modify. I'm going to modify it this and I'm going to take these objects into the stack panel. How am I going to do that? I'm going to do it like this and let's get these checkboxes inside the stack panel. Let's see the design. Okay. They are not visible right now. And they are not visible because our stack panel doesn't have any width or height. And let's see. Okay. Interesting. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. I think I will continue next week. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. I will try something. One moment. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay, now I can read it, however, it doesn't implicitly convert object to xbox item to do that, okay, now it works. Data context is used for other reasons as well, however, now we can use it like this with certain values, for example, I will set it some, let's make it like, let's say square mean, what I'm going to do is, square root, okay, yeah, square root, and to do that I have to convert it to, convert to double and replace or to string first, replace this to this and okay, okay, and here string and two, yeah. Now with this, I will read the value of the data context, with this I will replace the commas and with this I will convert it to double and with this I will take square root of the double value and with this I will convert back it to string, okay, so let's check it out, let's check the square root of this number, okay, this is the square root, let's verify it from Google, yeah, this is the square root and this is the value we get, you see, I only shown the two values after the floating numbers point, so it is correct, totally same, this show six, so I can modify it to show six numbers after the zero like this, okay, and square root is, you see, totally same, okay, you see I am displaying something different and I am getting the value of it at the background, it is totally up to me how to use it, let's continue writing, okay, what else, you see, we have seen how to use checkbox, okay, so let's continue writing, okay, let's continue writing, okay, let's continue writing, okay, let's continue writing, okay, let's continue writing, okay, let's continue writing, okay, let's continue writing, okay, let's continue writing, okay, let's continue writing, okay, let's continue writing, okay, let's continue writing, okay, let's continue writing, okay, we have written an extension, however, this didn't work as an extension, to make this work as an extension, I have to use this keyword and if I add this keyword here, now I can remove this as well, here, and it would work or it doesn't work, no, it doesn't work, okay, anyway, just let's don't change it, okay, if I remove this, how can I call this method, I can give the pull path like static extensions dot, now it works, okay, so to not write this, I can add that class like this, with this way, I am adding, yeah, okay, and okay, okay, okay, you may not be understanding all of the things we are doing right now, however, you will start to understand them as we see them in the upcoming lectures and at the next semester, there will be advanced programming and we will see most of these again, so you may just memorize them at the moment, however, in the future, you will start to understand them, okay, and at the next week, what else, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we have shown this, we