2013-08-01 105 views
0

對不起,我不清楚的問題:我不知道怎麼寫什麼,我想問問,但我的代碼可以幫助我清除它:如何「綁定」知道哪個對象我想要(XAML,DataGridTextColumn)

VehicleWidget.xaml

<local:ParkingWidget x:Class="VehiclesWidget" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:Widgets" Loaded="ParkingWidget_Loaded" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Height="65" Width="420"> 
<Grid Height="61" Width="411"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="5"/> <!--0--> 
     <ColumnDefinition Width="Auto"/> <!--1--> 
     <ColumnDefinition Width="Auto"/> <!--2--> 
     <ColumnDefinition Width="298"/> 
     <ColumnDefinition Width="0*" /> 
     <ColumnDefinition Width="38*" /> 
     <!--3--> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="5"/> <!--0--> 
     <RowDefinition Height="Auto"/> <!--1--> 
     <RowDefinition Height="5"/> <!--2--> 
     <RowDefinition Height="Auto"/> <!--3--> 
     <RowDefinition Height="5"/> <!--4-->   
    </Grid.RowDefinitions> 

    <Label 
     Content="Vehicles" 
     Grid.Column="1" Grid.Row="1"/> 

    <Button 
     Name="btnRefresh" 
     Grid.Column="2" Grid.Row="1" 
     Content="Refresh" 
     Width="98" 
     HorizontalAlignment="Right" 
     Click="btnRefresh_Click" Grid.ColumnSpan="2" Margin="0,2,257,2"> 
    </Button> 

    <DataGrid 
     Name="VehiclesDataGrid" 
     AutoGenerateColumns="False" 
     IsReadOnly="True" 
     Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" FontFamily="Arial" Margin="0,0,3,0"> 

     <DataGrid.Columns> 
      <DataGridTextColumn Header="Time" x:Name="timeColumn" Binding="{Binding Path=Time}" /> 
      <DataGridTextColumn Header="TicketId" x:Name="tickedIdColumn" Binding="{Binding Path=TicketId}" /> 
      <DataGridTextColumn Header="LPN" x:Name="lpnColumn" Binding="{Binding Path=LPN}" Visibility="Hidden" /> 
      <DataGridHyperlinkColumn Header="Picture" x:Name="pictureColumn" Binding="{Binding Path=TicketId}" Visibility="Hidden"> 
       <DataGridHyperlinkColumn.ElementStyle> 
        <Style> 
         <EventSetter Event="Hyperlink.Click" Handler="Hyperlink_Click"/> 
        </Style> 
       </DataGridHyperlinkColumn.ElementStyle> 
      </DataGridHyperlinkColumn> 
      <DataGridTextColumn Header="Class" x:Name="classColumn" Binding="{Binding Path=HeightClassification}" /> 
      <DataGridTextColumn Header="Weight" x:Name="weightColumn" Binding="{Binding Path=Weight}" /> 
      <DataGridTextColumn Header="Orientation" x:Name="orientationColumn" Binding="{Binding Path=Orientation.Degrees}" /> 
      <DataGridTextColumn Header="Piston1" x:Name="piston1Column" Binding="{Binding Path=Piston1}" /> 
      <DataGridTextColumn Header="Piston2" x:Name="piston2Column" Binding="{Binding Path=Piston2}" /> 
      <DataGridTextColumn Header="Location" x:Name="locationColumn" Binding="{Binding Path=Location}" /> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

在 「VehicleWidget.xaml.cs」 我有 「的車輛列表」,並在 「汽車」 類我的屬性:Piston1,Piston2,大小,LPN和當然重量

以下行,將列添加到網格並將其命名爲「Weight」並將其綁定到Weight。

<DataGridTextColumn Header="Weight" x:Name="weightColumn" Binding="{Binding Path=Weight}" /> 

綁定知道如何選擇哪個對象,將其作爲屬性?

我問這個問題,因爲我想綁定一個屬性不同的對象(不是Vehicle,就像本例中的NewVehicle,它繼承自Vehicle)。

+0

它在MSDN上的[數據綁定概述](http://msdn.microsoft.com/zh-cn/library/ms752347.aspx)文章中詳細介紹。 – Clemens

回答

0

XAML中的綁定是變量或對象與xaml小部件(如textview,gridviews等)之間的「鏈接」。有很多方法可以使用它。我會舉幾個例子:

-1-你的源代碼中的屬性綁定到文本塊。當變量改變其值時,正文塊變得更新:

<TextBlock Text="{Binding SomeProperty}"/> 

-2-更復雜的例子中,當文本框的值被改變該文本框的值變爲如果變量的變化和可變變得更新更新:

<TextBlock Text="{Binding SomeVar, Mode=TwoWay}"/> 

-3-數據綁定與轉換器,意味着你可以寫在c#,其處理的任何綁定值,並返回的任何自定義值/對象的轉換器:

XAML

<TextBlock Text="TrafficLight" Background="{Binding TrafficLightState, Converter={StaticRessource TrafficLightStateToColorConverter}}"> 

C#

public class TrafficLightStateToColorConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { 
     if(value.Equals("Green")) 
      return Color.FromKnownColor(KnownColor.Green) 
     else if(value.Equals("Yellow")) 
      return Color.FromKnownColor(KnownColor.Yellow) 
     else 
      return Color.FromKnownColor(KnownColor.Red) 
    } 
} 

是否回答您的問題,XAML是如何知道哪些對象使用?

+0

不,我不確定:第三個例子中的「TrafficLightState」是什麼?轉換器的含義是什麼? – user2004403

+0

「你的源代碼中的一個變量被綁定到一個文本塊」,如你的例子所示不清楚甚至是錯誤的。綁定必須轉到* object *的*屬性*。雖然綁定的屬性部分通常很清晰,但有幾種不同的方法來指定源對象。我強烈建議閱讀MSDN上的[數據綁定概述](http://msdn.microsoft.com/en-us/library/ms752347.aspx)文章。 – Clemens

+0

而你的例子轉換器甚至不會從它的'Convert'方法中返回一個值。對不起,但這真是一個不好的答案。 – Clemens

相關問題