簡體   English   中英

用戶控件Win8中的c#DataBinding

[英]c# DataBinding in User control Win8

我有一個ObservableCollection的列表,該列表從數據庫接收數據,並通過數據綁定將這些數據放入網格中。 因此,我有一個用戶控件,當我單擊此網格的某個項目時出現。 我希望用戶控件的文本框顯示網格中的所選項目。 我已經使用數據綁定嘗試了此操作,但是文本框未顯示所選項目。

網格代碼:

<FlexGrid:C1FlexGrid 

        x:Name="grid" ItemsSource="{Binding list3, Mode=TwoWay}" 
        AutoGenerateColumns="False" 
        HorizontalAlignment="Left" Height="431" Margin="10,147,0,0" VerticalAlignment="Top" Width="1152" SelectionMode="Row" KeepCurrentVisible="True" Tapped="grid_Tapped" >
        <FlexGrid:C1FlexGrid.DataContext>
            <local:Controller/>
        </FlexGrid:C1FlexGrid.DataContext>

        <FlexGrid:C1FlexGrid.Columns>
            <FlexGrid:Column Binding="{Binding describe}" Header="Describes" Width="800" />
            <FlexGrid:Column Binding="{Binding describeNote}" Header="Describes Notes" Width="300" />
        </FlexGrid:C1FlexGrid.Columns>

    </FlexGrid:C1FlexGrid>

用戶控制代碼:

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Binding"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:FlexGrid="using:C1.Xaml.FlexGrid"
x:Class="Binding.popNotas"
mc:Ignorable="d" Height="281.925" Width="656.03">

<Grid>
    <TextBox x:Name="txt2" Text="{Binding SelectedItem.describe, ElementName=grid, Mode=TwoWay}" Height="38" Margin="140,5,141,0" TextWrapping="Wrap" VerticalAlignment="Top">

    </TextBox>

</Grid>

CS代碼

public class Controller : Common.BindableBase
{
    //DAOS      
    public TesteDao dao { get; set; }


    private ObservableCollection<ClPasso> _list3 = new ObservableCollection<ClPasso>();
    public ObservableCollection<ClPasso> list3
    {
        get { return _list3; }
        set { this.SetProperty(ref this._list3, value); }
    }


    public Controller()
    {
        OnNavigatedTo();

    }
    protected async void OnNavigatedTo()
    {
        await InitializeDatabase();
        list3 = await createlist3();
    }

    private async Task InitializeDatabase()
    {
        string datbasePath = Windows.Storage.ApplicationData.Current.LocalFolder.Path + "\\bd_example.db";
        DataBase database = new DataBase (datbasePath);
        await database.initialize();
        dao = new TesteDao(database);

    }


    public async Task<ObservableCollection<ClPasso>> createlist3()
    {
        return await dao.joinListAsync(123, "924be4cc-16db-40c2-b342-d6c1fccbec86");
    }

  }

救命!

謝謝!!!

我已經解決了我的問題。

因此,我在用戶控件后面的代碼上創建了DependencyProperty,命名為selection,然后將其放在文本框的文本中。.當我將使用用戶控件時,在我的主頁中,將值傳遞給了porperty ..

像這樣:

用戶控制

 public sealed partial class UCNotes : UserControl
{


    public string selection
    {
        get { return (string)GetValue(selectionProperty); }
        set { SetValue(selectionProperty, value); }
    }

    public static readonly DependencyProperty selecionadoProperty =
        DependencyProperty.Register("selection", typeof(string), typeof(UCNotes), new PropertyMetadata(null));

用戶控件XAML

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Test"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:FlexGrid="using:C1.Xaml.FlexGrid"
x:Class="Fiscalizacao.UCNotes"
mc:Ignorable="d"
d:DesignHeight="327.068" Width="799.248">

<Grid Margin="10,0,10,10" Background="#FFB2B2B2" Height="303" VerticalAlignment="Bottom">
    <TextBox x:Name="txtSelection" Text="{Binding selection}" Height="38" Margin="153,75,153,0" TextWrapping="Wrap" VerticalAlignment="Top" BorderBrush="Black"/>

主頁XAML

 <FlexGrid:C1FlexGrid 
            x:Name="questionsGrid" 
            HorizontalAlignment="Left" Height="417" Margin="31,181,0,0" VerticalAlignment="Top" Width="1306" 
            AutoGenerateColumns="False" KeepCurrentVisible="True" 
            SelectionMode="Row" ItemsSource="{Binding list, Mode=TwoWay}">
            <FlexGrid:C1FlexGrid.Columns>
                <FlexGrid:Column Binding="{Binding describes}" Header="Descrição" Width="900" />
                <FlexGrid:Column Binding="{Binding descibesNotes}" Header="Nota" Width="*" />
            </FlexGrid:C1FlexGrid.Columns>
        </FlexGrid:C1FlexGrid>

        <Popup x:Name="popNotes" IsLightDismissEnabled="True" IsOpen="False" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="1" Grid.Column="1" Margin="0,0,700,300" >
            <local:UCNotes selection="{Binding SelectedItem.describes, ElementName=questionsGrid" />

        </Popup>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM