在绑定XAML中未设置Combobox SelectedValue,但在C#中有效

格伦·天使

我在WPF中有一个绑定到窗口的模型。

pageData

保存我的所有数据,并包含一个字段:

pageData.orders.PrefContact

在页面上的测试中,这是由模型填充的(整数1-> 4)

我拥有这个XAML:

    <Label Content="Last Name" Grid.Column="2" Grid.Row="0" Margin="0,10,0,0" HorizontalAlignment="Right"/>
            <TextBox x:Name="txtLastName" Text="{Binding Path = order.LastName}" Grid.Column="3" Grid.Row="0" Margin="10,10,0,0" Width="200" HorizontalAlignment="Left" 
                 TabIndex="1" LostFocus="txtLastName_LostFocus" />

<Label Content="Contact Method" Grid.Column="2" Grid.Row="1" Margin="0,10,0,0" HorizontalAlignment="Right"/>
                <ComboBox x:Name="cmbPrefContact" SelectedValue="{Binding Path = order.PrefContact}" SelectionChanged="cmbPrefContact_SelectionChanged" Grid.Column="3"   
                          Width="200" Grid.Row="1" Margin="10,10,0,0" HorizontalAlignment="Left" 
                     TabIndex="3"  Height="37" VerticalAlignment="Top" />

在这种情况下,将正确填充文本框txtLastName,希望显示该模型已正确附加到XAML。

在我的C#中,我有一个部分来创建组合框:

private void bindCmbPref(int cmbpref)
        {
            var client = new RestClient("http://XXX.XXX.XXX:3000/comboData/contactPrefData");
            client.Timeout = -1;
            var request = new RestRequest(Method.GET);
            IRestResponse response = client.Execute(request);
            Console.WriteLine(response.Content);

            var JsonString = response.Content;
            var contactPrefData = JsonConvert.DeserializeObject<contactPrefData>(JsonString);

            foreach (var contactPrefs in contactPrefData.ContactPrefs)
            {
                
                cmbPrefContact.Items.Add(contactPrefs);
                cmbPrefContact.SelectedValuePath = "contactPrefID";
                cmbPrefContact.DisplayMemberPath = "ContactType";
            }
           
            //cmbPrefContact.SelectedValue = cmbpref;
            
        }

老实说,我是用这种方式创建的...我还不了解整个模型/ MVVM,而且经过数小时的努力后,我才明白。(目前)。我希望以此方式创建组合,但随后使用绑定来设置组合,就像我的文本框一样,但是它不起作用。

如果我允许结束代码在以上C#代码中工作,则可以使用从pageData.orders.PrefContact获取的变量来设置SelectedValue。

绑定不适用于组合框,在这里我在做什么错?

编辑:我的模型在下面是contactPrefs,这是我制作的API的结果JSON。

public partial class contactPrefData
    {
        public bool Result { get; set; }
        public List<contactPrefs> ContactPrefs { get; set; }

        public partial class contactPrefs
        {
            public int contactPrefID { get; set; }
            public string ContactType { get; set; }            
        }


    }

我的pageData来自以下模型:

public partial class OrderResponse
    {
        public bool Result { get; set; }
        public Order order { get; set; }

        public partial class Order
        {
            public long OrderId { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public string Phone { get; set; }
            public string Email { get; set; }
            public int PrefContact { get; set; }
            public string ItemName { get; set; }
            public int ItemQuantity { get; set; }
            public string Plu { get; set; }
            public string ModelNumber { get; set; }
        }
}

将订单模型设置为页面dataContext的C#:

pageData = JsonConvert.DeserializeObject<OrderResponse>(JsonString);

            DataContext = pageData;

如果order.PrefContact = 1: 在此处输入图片说明 在此处输入图片说明

HOWEVR,如果我更改数据库和订单。PrefContact= 2: 在此处输入图片说明 在此处输入图片说明

当前工作状况: C#:

cmbPrefContact.ItemsSource = contactPrefData.ContactPrefs;
cmbPrefContact.SelectedValuePath = "contactPrefID";
cmbPrefContact.DisplayMemberPath = "ContactType";

XAML:

<ComboBox x:Name="cmbPrefContact" 
                      
                      SelectedValue="{Binding Path = order.PrefContact}"
                      SelectedValuePath ="contactPrefID"  
                      DisplayMemberPath  ="contactType"
                      SelectionChanged="cmbPrefContact_SelectionChanged" Grid.Column="3"   
                      Width="200" Grid.Row="1" Margin="10,10,0,0" HorizontalAlignment="Left" 
                 TabIndex="3"  Height="37" VerticalAlignment="Top" />

因此,现在我想我不确定为什么需要在C#和XAML中指定显示成员和值路径...但是,如果我从任一侧拿走它们中的一个,它将停止工作!

这是我的联系偏好数据正在加载到组合框中:

{
    "Result": true,
    "contactPrefs": [
        {
            "contactPrefID": 1,
            "ContactType": "SMS"
        },
        {
            "contactPrefID": 2,
            "ContactType": "Phone Call"
        },
        {
            "contactPrefID": 3,
            "ContactType": "Email"
        },
        {
            "contactPrefID": 4,
            "ContactType": "None"
        }
    ]
}

数据库infoo显示prefContact的ID

最终的工作代码,由mm8制定:XAML:

<ComboBox x:Name="cmbPrefContact" 
                      
                      SelectedValue="{Binding Path = order.PrefContact}"
                      SelectedValuePath ="contactPrefID"  
                      DisplayMemberPath  ="ContactType"
                      SelectionChanged="cmbPrefContact_SelectionChanged" Grid.Column="3"   
                      Width="200" Grid.Row="1" Margin="10,10,0,0" HorizontalAlignment="Left" 
                 TabIndex="3"  Height="37" VerticalAlignment="Top" />

C#:

var JsonString = response.Content;
            var contactPrefData = JsonConvert.DeserializeObject<contactPrefData>(JsonString);
                       
            cmbPrefContact.ItemsSource = contactPrefData.ContactPrefs;
毫米8

您应该将SelectedValue属性绑定int源属性:

<ComboBox x:Name="cmbPrefContact" SelectedValue="{Binding order.PrefContact}" ... />

SelectedItem应该绑定到一个contactPrefs属性。

您还应该foreach通过设置来替换循环ItemsSource

cmbPrefContact.ItemsSource = contactPrefData.ContactPrefs;

...以及XAML中SelectedValuePathDisplayMemberPath

<ComboBox x:Name="cmbPrefContact" ... SelectedValuePath = "contactPrefID" DisplayMemberPath = "ContactType" />

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

存储过程在DB中有效,但在C#代码中无效

来自分类Dev

查询在HeidiSQL中有效,但在C#中失败

来自分类Dev

C#中的泛型编译错误(但在VB.NET中有效)

来自分类Dev

使用 webdriver (C#) 上传文件在 Firefox 中有效,但在 IE 中无效

来自分类Dev

使用反射的对象实例化在VB.NET中有效,但在C#中不起作用

来自分类Dev

C# 代码在 Visual Studio 2019 中有效,但在在线编译器中无效

来自分类Dev

交换整数的代码在C ++中有效,但在C中不起作用

来自分类Dev

未设置ComboBox的SelectedValue

来自分类Dev

fibonacci在python中有效,但在Java中失败

来自分类Dev

查询在sql中有效,但在php中无效

来自分类Dev

regEx在notepad ++中有效,但在python中无效

来自分类Dev

orphanRemoval在PostgreSQL中有效,但在hsqldb中无效

来自分类Dev

代码在终端中有效,但在脚本中无效

来自分类Dev

orphanRemoval在PostgreSQL中有效,但在hsqldb中无效

来自分类Dev

命令在crontab中失败,但在终端中有效

来自分类Dev

WritePrivateProfileString 在 main 中有效但在函数中无效

来自分类Dev

半动态分配代码在 c++ 中有效,但在 c 中无效,为什么?

来自分类Dev

c#WebClient调用在.NET 3.5中有效,但在.NET 4.0中无效

来自分类Dev

numpy错误的python C扩展在64位centos中有效,但在32位centos中可以

来自分类Dev

命令在脚本(或-c)中有效,但在直接运行时(在交互式shell中)则无效

来自分类Dev

通过PHP设置Cookie在Chrome中有效,但在Firefox或IE中不起作用

来自分类Dev

参数有效,但在C#中不起作用

来自分类Dev

设置值jquery在跟踪中有效,但在没有跟踪时无效

来自分类Dev

带有javascript的HTML表单在IE中获得“ NaN”,但在Chrome中有效

来自分类Dev

带有javascript的HTML表单在IE中获得“ NaN”,但在Chrome中有效

来自分类Dev

更新集命令在 Access 中有效,但在带有 @parameters 的 Visual Studio 中无效

来自分类Dev

Powershell设置EnvironmentVariable在ISE中有效,但在控制台中无效

来自分类Dev

本地化在iOS 7中有效,但在iOS 8中无效

来自分类Dev

PDF响应在Python 3中已损坏,但在Python 2中有效

Related 相关文章

  1. 1

    存储过程在DB中有效,但在C#代码中无效

  2. 2

    查询在HeidiSQL中有效,但在C#中失败

  3. 3

    C#中的泛型编译错误(但在VB.NET中有效)

  4. 4

    使用 webdriver (C#) 上传文件在 Firefox 中有效,但在 IE 中无效

  5. 5

    使用反射的对象实例化在VB.NET中有效,但在C#中不起作用

  6. 6

    C# 代码在 Visual Studio 2019 中有效,但在在线编译器中无效

  7. 7

    交换整数的代码在C ++中有效,但在C中不起作用

  8. 8

    未设置ComboBox的SelectedValue

  9. 9

    fibonacci在python中有效,但在Java中失败

  10. 10

    查询在sql中有效,但在php中无效

  11. 11

    regEx在notepad ++中有效,但在python中无效

  12. 12

    orphanRemoval在PostgreSQL中有效,但在hsqldb中无效

  13. 13

    代码在终端中有效,但在脚本中无效

  14. 14

    orphanRemoval在PostgreSQL中有效,但在hsqldb中无效

  15. 15

    命令在crontab中失败,但在终端中有效

  16. 16

    WritePrivateProfileString 在 main 中有效但在函数中无效

  17. 17

    半动态分配代码在 c++ 中有效,但在 c 中无效,为什么?

  18. 18

    c#WebClient调用在.NET 3.5中有效,但在.NET 4.0中无效

  19. 19

    numpy错误的python C扩展在64位centos中有效,但在32位centos中可以

  20. 20

    命令在脚本(或-c)中有效,但在直接运行时(在交互式shell中)则无效

  21. 21

    通过PHP设置Cookie在Chrome中有效,但在Firefox或IE中不起作用

  22. 22

    参数有效,但在C#中不起作用

  23. 23

    设置值jquery在跟踪中有效,但在没有跟踪时无效

  24. 24

    带有javascript的HTML表单在IE中获得“ NaN”,但在Chrome中有效

  25. 25

    带有javascript的HTML表单在IE中获得“ NaN”,但在Chrome中有效

  26. 26

    更新集命令在 Access 中有效,但在带有 @parameters 的 Visual Studio 中无效

  27. 27

    Powershell设置EnvironmentVariable在ISE中有效,但在控制台中无效

  28. 28

    本地化在iOS 7中有效,但在iOS 8中无效

  29. 29

    PDF响应在Python 3中已损坏,但在Python 2中有效

热门标签

归档