Michells Mesterværk

Element til Element binding på tværs af UserControls (Silverlight)

by Daniel 10. July 2009 12:22

Jeg skrev en post for noget tid siden, ang. Element 2 Element binding i Silverlight 3. Eksemplet var meget simpelt men viste klart hvad muligheden er. Nu er jeg blevet udfordret en smule mere.

Ingredienser:

1 stk. usercontrol med 1 texbox.
1 stk. page med 1 textbox.

Følgende løsning viser hvordan man kan gøre det, men jeg er slet ikke sikker på, om det er den mest optimale løsning.

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    x:Class="SilverlightApplication4.MainPage" 
    xmlns:y="clr-namespace:SilverlightApplication4"
    Width="400" Height="300" mc:Ignorable="d">
    <Grid x:Name="LayoutRoot" Background="White">
        <StackPanel x:Name="controls" />
        <TextBox x:Name="TextBoxA" 
                 TextChanged="A_TextChanged" 
                 Width="200" 
                 Margin="68,77,132,0" 
                 VerticalAlignment="Top" 
                 d:LayoutOverrides="Height" />
    </Grid>
</UserControl>

Jeg loader min usercontrol ind dynamisk via et stackpanel…

public partial class MainPage : UserControl {
    private Sister sis = new Sister();

    public MainPage() {
        InitializeComponent();

        controls.Children.Add( sis );
    }

    private void A_TextChanged( object sender, TextChangedEventArgs e ) {
        sis.TextBoxB.Text = TextBoxA.Text;
    }
}

…og tilgår min textbox på min usercontrol via OnTextChanged eventen.

Det er en løsning, men det ville have været federe hvis jeg kunne lave en binding direkte på min textbox.

Har i andre forslag ?

Tags:

Find alle PlaceHolders i en MasterPage (WebForms)

by Daniel 9. July 2009 13:51

Svar til http://www.eksperten.dk/spm/879173

Ved hjælp af en lille rekursiv metode, kan du meget nemt finde lige præcis den eller de kontroller du måtte have brug for. Også selvom de ligger i en masterpage.

Her er et udsnit af vores masterpage:

<form id="form1" runat="server">
<div>
    <asp:PlaceHolder runat="server" ID="ph1" />
    <asp:PlaceHolder runat="server" ID="ph2" />

    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        
    </asp:ContentPlaceHolder>
    
    <asp:PlaceHolder runat="server" ID="ph3" />
</div>
</form>

Lad os forsøge at finde alle de placeholders der findes i den masterpage.

Vi kan enten tilgå vores masterpage fra dens egen code-behind til eller evt. gøre det fra en side der arver fra den pågældende masterpage. I dette tilfælde gør vi det med sidstnævnte metode hvilket kræver at du kalder nedenstående kode fra din WebForms page og ikke dine WebForms masterpage.

public partial class WebForm1 : System.Web.UI.Page {
    protected void Page_Load( object sender, EventArgs e ) {
        FindPlaceHolders( Master.Controls );

        foreach ( var item in _placeHolders ) {
            Response.Write( item.ID );
        }
    }

    private IList<PlaceHolder> _placeHolders = new List<PlaceHolder>();

    private void FindPlaceHolders( ControlCollection controls ) {
        foreach ( Control item in controls ) {
            if ( item is PlaceHolder ) {
                _placeHolders.Add( (PlaceHolder)item );
            }
            if ( item.HasControls() ) {
                FindPlaceHolders( item.Controls );
            }
        }
    }
}

Ease peasy

Tags:

Knap i en GridView (WebForms)

by Daniel 9. July 2009 13:14

Svar til http://www.eksperten.dk/spm/879845

Du kan lave en knap i en GridView ved enten, at lave en ButtonField eller en TemplateField.

Sidstnævnte er helt klart min favorit selvom, at GridView kontrollen minder mig om det russiske atom kræftværk Chernobyl, der nedsmeltede i 1986.

Hvis du skal lave en knap med en TemplateField er det sådan set lige ud a landevejen (husk at der er Tour de France i denne tid)

<asp:GridView OnRowCommand="GridView1_RowCommand" ID="GridView1" runat="server" AutoGenerateColumns="False"
    CellPadding="4" DataKeyNames="Name" DataSourceID="SqlDataSource1" ForeColor="#333333"
    GridLines="None">
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button runat="server" CommandName="IDButton" Text="ID" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Name") %>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Name" HeaderText="Name" ReadOnly="True" SortExpression="Name" />
    </Columns>
</asp:GridView>

Det er der jo ingen ben i (selvom det ikke er særlig pænt). Det eneste du skal sørge for at angive på din knap er et CommandName og skal du have en parameter med når der trykkes på knappen, skal du angive en CommandArgument.

Yderligere skal du hooke dig ind på den RowCommand event der bliver kaldt når fra den pågældende GridViewRow. Det gøres via vores OnRowCommand attribut på selve GridViewet.

I vores code-behind fil kan vi fange eventen og se på vores GridViewCommandEventArgs.

protected void GridView1_RowCommand( object sender, GridViewCommandEventArgs e ) {
    //Her kan vi manipulere med vores CommandArgument. Kald bare e.CommandArgument 
}

Så nemt kan det gøres :)

Tags:

SQL Azure og prismodel

by Daniel 9. July 2009 09:50

SQL delen af Azure har fået et helt nyt navn. Nu hedder det SQL Azure! Udviklingen og mulighederne omkring SQL Azure vil ikke ændre sig hvilket betyder, at vi stadig kan vente os en relationel database i skysovsen. Azure ventes at blive lanceret senere på året men pris modellen kommer allerede i næste uge, nemlig i forbindelse med Microsoft Worldwide Partner Conference i New Orleans.

SQL-Azure_rgb_thumb

Hvis du ikke kender til Windows Azure kan du læse mine blog post om emnet.

Tags:

Google Chrome OS – kampen om klienten er startet

by Daniel 8. July 2009 13:58

Jeg kan ikke lade være med, at kigge et par dage tilbage, da jeg skrev min post omkring IE8 og FireFox. I den post gav jeg netop udtryk for, at vi ikke bare står overfor midt i en browser krig, men vi står i en krig om hvem der skal dominere klient markedet i den kommende era. Jeg kan heller ikke lade være med, at tænke tilbage på den tid hvor jeg havde en idé om at lave en blog serie om “Næste version af Windows klienten” set med mine egne øjne. Den kom aldrig ud, af politiske årsager, men nu er jeg altså gået igang med den alligevel og den skal nok blive offentliggjort senere på efteråret.

Igår eftermiddags besøgte jeg ZYB, som jeg ofte gør, og havde en time lang snak med Kenneth Auchenberg omkring netop browsere, markedsandele og hvad fremtiden kan bringe. Rent teknisk synes jeg ikke browsere er specielt interessante, men det synes jeg derimod de er, når man snakker om forretnings aspektet i dem. Kenneth havde gode pointer i forhold til det tekniske, og Mads kom med indspark set fra et højere og mere konsumer rettet niveau. Vi var dog alle enige om, at browseren er den nye klient. Altså,  browseren er der hvor man i fremtiden vil bruge det meste af sin tid på en computer – period! Sådan er det allerede for rigtige mange mennesker idag, men det kan og vil blive meget mere “normalt” i fremtiden. En ny era!

Jeg glæder mig at se hvad Google har fundet på med deres Chrome OS, men til jer der ikke allerede vidste det, så har Chrome hele tiden været et slags OS. Det har aldrig kun været en browser til at vise sider i, men ligeså meget Google’s platform til deres Gears framework. Et framework der vidst aldrig er kommet helt ud over rampen.

Lad os se på hvad Google skriver på deres egen blog omkring deres nye såkaldte OS.

It's been an exciting nine months since we launched the Google Chrome browser. Already, over 30 million people use it regularly. We designed Google Chrome for people who live on the web — searching for information, checking email, catching up on the news, shopping or just staying in touch with friends. However, the operating systems that browsers run on were designed in an era where there was no web. So today, we're announcing a new project that's a natural extension of Google Chrome — the Google Chrome Operating System. It's our attempt to re-think what operating systems should be.

Her forklares der lidt om hvad en browser er og hvordan brugeren benytter den til idag. Ydermere synes jeg, at det føles som der bliver trukket et gennemsigtigt tæppe væk fra en tom scene, i og med, at de annoncere en “Openration System extension” til deres browser Chrome men undlader at fortælle mere om hvad det indebærer. Det er tyndt synes jeg, men det er deres kendetegn i alt hvad de laver udover deres søgning!

Google Chrome OS is an open source, lightweight operating system that will initially be targeted at netbooks. Later this year we will open-source its code, and netbooks running Google Chrome OS will be available for consumers in the second half of 2010. Because we're already talking to partners about the project, and we'll soon be working with the open source community, we wanted to share our vision now so everyone understands what we are trying to achieve.

Og Google vælger at fortsætte ud af samme spor, et spor de tilsyneladende ikke kan komme ud af. Udmeldingen om, at lave den “naturlige chrome extension” open source kan næppe komme som nogen overraskelse, da OS’et bygger på en Linux kernel.

Speed, simplicity and security are the key aspects of Google Chrome OS. We're designing the OS to be fast and lightweight, to start up and get you onto the web in a few seconds. The user interface is minimal to stay out of your way, and most of the user experience takes place on the web. And as we did for the Google Chrome browser, we are going back to the basics and completely redesigning the underlying security architecture of the OS so that users don't have to deal with viruses, malware and security updates. It should just work.

Ovenstående paragraf er jo heller ikke særligt revolutionerende. Alle ved, at Chrome er lynhurtig, letvægtig og med et skrabet interface. Og at bruger oplevelsen finder sted på webbet er vel næppe en overraskelse. At Google vil holde deres OS fri for malware og vira er utopi, men det lærer de nok hen ad vejen.

Google Chrome OS will run on both x86 as well as ARM chips and we are working with multiple OEMs to bring a number of netbooks to market next year. The software architecture is simple — Google Chrome running within a new windowing system on top of a Linux kernel. For application developers, the web is the platform. All web-based applications will automatically work and new applications can be written using your favorite web technologies. And of course, these apps will run not only on Google Chrome OS, but on any standards-based browser on Windows, Mac and Linux thereby giving developers the largest user base of any platform.

Så har Google i virkligheden udviklet et operativ system eller mangler de downloads til deres browser ? Man kan også køre alle varianter af web applikationer i alle andre browsere, men det har man da vidst kunnet i mange år. Hvad er nyheden ?

Google Chrome OS is a new project, separate from Android. Android was designed from the beginning to work across a variety of devices from phones to set-top boxes to netbooks. Google Chrome OS is being created for people who spend most of their time on the web, and is being designed to power computers ranging from small netbooks to full-size desktop systems. While there are areas where Google Chrome OS and Android overlap, we believe choice will drive innovation for the benefit of everyone, including Google.

Hvad er det Google siger her ?

We hear a lot from our users and their message is clear — computers need to get better. People want to get to their email instantly, without wasting time waiting for their computers to boot and browsers to start up. They want their computers to always run as fast as when they first bought them. They want their data to be accessible to them wherever they are and not have to worry about losing their computer or forgetting to back up files. Even more importantly, they don't want to spend hours configuring their computers to work with every new piece of hardware, or have to worry about constant software updates. And any time our users have a better computing experience, Google benefits as well by having happier users who are more likely to spend time on the Internet.
We have a lot of work to do, and we're definitely going to need a lot of help from the open source community to accomplish this vision. We're excited for what's to come and we hope you are too. Stay tuned for more updates in the fall and have a great summer.

Hvis Google Chome OS kan sørge for at få min maskine til at boote på kortere tid end min Windows7 installation, og samtidig sørge for, at min maskine køre som den gjorde da jeg fik den, så vil jeg da gerne bruge den. Glæder mig til at se hvordan Google vil løse hardware konfigurationen, som de her proklamere er noget af det vigtigste for deres brugere. Google har dog ret i, at der venter en masse arbejde foran jer :)

Jeg synes Google virker som en ret interessant virksomhed, men jeg synes godt nok der er langt imellem deres gode produkter, frameworks og de services de tilbyder. Det synes jeg denne nyhed beviser endnu engang.

Når det drejer sig om kampen om klienten synes jeg der er andre der virker langt mere faretruende end søgegiganten, og det kan du så tænke lidt over i din sommerferie.

Tags:

Expression og Silverlight 3 lancering på Fredag

by Daniel 7. July 2009 15:16

Fredag d. 10 juli vil Silverlight og Expression 3 blive lanceret på et virtuelt event.

Du kan følge med og se keynote + sessioner online via http://www.seethelight.com/

Jeg kommer også ind i Silverlight 3 kampen efter min sommerferie, og det kan i godt glæde jer til :)

Tags:

IE8 vs. FireFox

by Daniel 6. July 2009 10:23

Det eI mit nye år (startede 1 juli for os MS’ere) er jeg blevet bedt om, at lave en del “compete” aktiviteter i forhold til teknologi, værktøjer etc. hvor der ikke står Microsoft på produktet. Det bliver sikkert meget sjovt at prøve, og jeg vil forsøge at gøre mit bedste for at være saglig, professionel og ærlig. Som jeg sagde til min manager: “jeg kan godt lide at provokere lidt”, så mon ikke jeg får nok at se til på det punkt :p)

Jeg vil lægge ud med noget af det, som jeg synes virker allermest betændt, både internt men også eksternt i markedet – Internet Explorer 8. Hvordan bære man sig så lige an med at gøre det på en saglig måde ;p)

Det er altid interessant at kommunikere med jer først, fordi i oftest er på forkant med hvad der er nyt, hvad der virker, hvordan tingene burde være etc. I hvertfald i forhold til teknologi (I skal ikke give mig tips til hverken mad eller kvinder), og i dette tilfælde en browser.

På den anden side udgør udviklere en så lille ubetydelig andel af internet brugere, at jeg ikke ville have svært ved at lade være med at skrifte mine betragniger og meninger, men jeg tror trods alt på, at det er udviklere der i dette tilfælde løfter nye trends op til resten af “konsumer” markedet.

I må ikke glemme hen ad vejen, at Internet Explorer stadigvæk ligger på rigtige mange PC’er overalt i verden og, at det billede højst sansynligt ikke vil ændre sig synderligt meget de næste par år.

Microsoft har i fortiden ikke gjort specielt meget ud af at udvikle sin internet browser i samme retning som man måske kunne have håbet på. Og nu da internettet for alvor er ved at være platformen til meget af det som man fortager sig på en computer, så ligger det et naturligt men meget stort pres på værktøjet man bruger til formålet. Uheldigvis for Microsoft og mig, så er der kommet et par super innoverende og hurtige alternativer til internet browsing, og de kan noget som vi stadig bare drømmer om.

Innovation er pragtfuld, især fordi den oftes sætter skub i nogle ting hos eventuelle modparter. Dette gør sig naturligtvis gældende hos Microsoft såvel som hos Google og i dette tilfælde også Mozilla. Med innovation og konkurrence får kunden ofte et bedre produkt, og kunden bør vel altid have ret til det bedste. Desværre har Microsoft ikke kunne leve op til sin rolle som innovativ software virksomhed når vi taler om IE8 og det synes jeg er yderst skuffende, især for alle vores brugere, kunder etc.

Til jer der kender Microsoft godt, så ved i også godt, at virksomheden oftes har formået, at rejse sig fra støvet og lave noget der er bedre end det vores konkurrenter har kunnet præsterer. Og det er jeg også sikker på sker med Internet Explorer. Eller sagt med andre ord – det skal også ske med Internet Explorer, ellers taber vi!

Hvad der bør udgøre en browser i mine øjne, er (i priorteret rækkefølge); brugervenlighed, performance, stabilitet, produktivitet og funktionalitet. Disse 5 ting er mest set med “konsumerens” briller, men alle 5 kan i princippet videreføres i forhold til udvikleren (dog ikke i samme priortet). Hvad der er vigtigst for en browser, set med en udviklers øjne, er innovation og udviklings-relaterede features. Bla. derfor er vores konkurrenter FireFox og Chrome så populære for tiden. FireFox er på flere punkter hurtigere end IE, har langt mere at byde på i forhold til udvikleren og sørger for at være innovativ hver gang en ny release udkommer. FireFox virker bare mere gennemført når man skal bruge browseren til udviklings-relaterede opgaver, og det vil være dumt af mig at sige andet.

På den anden side synes jeg virklig, at Microsoft har forsøgt at flytte sig med IE8. Ved at følge trop og implementere nogle af W3C’s standarder føler jeg, at Microsoft har taget ved lære, og lyttet til den kritik der har haglet ned over virksomheden for netop ikke, at overholde de mest basale standarder. Udover det synes browseren er blevet markant hurtigere end dens forgænger plus der er en række nye features (InPrivate og Accellerators bla.) som jeg mener er ret cool. Men nu er mit spørgsmål til dig; er det nok ? Er der sket tilstrækkeligt i IE8 til, at browseren kan blande sig i topstriden om første pladsen på browser markedet og kalde sig innoverende og bedst ?

Tags:

Powered by BlogEngine.NET 1.6.0.0
Theme by Mads Kristensen