WPF数据网格组合框列选择C#中的项数据绑定

时间:2016-10-03 20:30:47

标签: data-binding

当我在组合框中更改选择时,调试器将在TestSelectedItem {set}类中点击User,但我想在TestSelectedItem {set}类中点击调试器MainWindow。请建议我正确的解决方案。

public class User
{
    public string Name { get; set; }
    public ObservableCollection<string> TypeCollection { get; set; }     

    private string _testSelectedItem;
    public string TestSelectedItem
    {
        get { return _testSelectedItem; }
        set { _testSelectedItem = value; }
    }

    public User()
    {
        TypeCollection = new ObservableCollection<string>();
        TypeCollection.Add("A");
        TypeCollection.Add("B");
        TypeCollection.Add("C");
    }
}

public partial class MainWindow : Window
{
    public List<User> Users { get; set; }

    private string _testSelectedItem;
    public string TestSelectedItem
    {
        get { return _testSelectedItem; }
        set { _testSelectedItem = value; }
    }

    public MainWindow()
    {
        InitializeComponent();
        Users = new List<User>();
        Users.Add(new User() { Name = "User 1" });
        Users.Add(new User() { Name = "User 2" });
        Users.Add(new User() { Name = "User 3" });
        myGrid.DataContext = this;
    }
}

<Window x:Class="WpfApplication11.MainWindow"
    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"
    xmlns:local="clr-namespace:WpfApplication11"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Grid Name ="myGrid">
    <StackPanel>

        <DataGrid Name="MyDataGrid" AutoGenerateColumns="False"                ItemsSource="{Binding Users}">

        <DataGrid.Columns>               

            <DataGridTextColumn Binding="{Binding Name}"
                                Header="Name"
                                Width="90"
                                CanUserResize="False"
                                CanUserSort="False"
                                CanUserReorder="False"
                                IsReadOnly="True" />

                <DataGridComboBoxColumn Header="Product Type" 
                                        DisplayMemberPath="ProductType" 
                                        SelectedValuePath="ProductTypeId" 
                                        SelectedValueBinding="{Binding   SelectedValuePath, UpdateSourceTrigger=PropertyChanged}">

                    <DataGridComboBoxColumn.ElementStyle>
                        <Style TargetType="{x:Type ComboBox}">
                            <Setter Property="ItemsSource" Value="{Binding  TypeCollection}"/>
                            <Setter Property="VerticalAlignment"   Value="Center"/>
                        </Style>
                    </DataGridComboBoxColumn.ElementStyle>

                    <DataGridComboBoxColumn.EditingElementStyle>
                        <Style TargetType="{x:Type ComboBox}">
                            <Setter Property="ItemsSource" Value="{Binding TypeCollection}"/>
                            <Setter Property="VerticalAlignment" Value="Center"/>
                        </Style>
                    </DataGridComboBoxColumn.EditingElementStyle>
                </DataGridComboBoxColumn>

                <DataGridTemplateColumn Header="Bug">
                    <DataGridTemplateColumn.CellTemplate >
                        <DataTemplate>
                            <ComboBox Height="25" Width="200" 
                                      x:Name ="ppCombo"
                                      ItemsSource="{Binding TypeCollection  }" 
                                      SelectedItem="{Binding  TestSelectedItem ,Mode=TwoWay ,UpdateSourceTrigger=PropertyChanged}">
                            </ComboBox>

                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>

        </DataGrid>           

        </StackPanel>

    </Grid>
</Window>

1 个答案:

答案 0 :(得分:0)

我想我刚刚找到了一个解决方案,但不确定是否正确

SelectedItem =&#34; {Binding RelativeSource = {RelativeSource FindAncestor,AncestorType = {x:Type local:MainWindow}},Path = TestSelectedItem}&#34;&gt;