【问题标题】:WPF lookupedit binding not wokingWPF 查找编辑绑定不起作用
【发布时间】:2013-12-31 09:19:02
【问题描述】:

我正在尝试将 WCF 服务的结果绑定到 devexpress 查找编辑。

这是我创建的属性

<!-- language: c# -->
public class BindingModel
{
private static List < VW_ClientProcess> _clientProcess= new List< VW_ClientProcess>(); 

public List< VW_ClientProcess> clientProcess  
{  
   get  
        {  
            return _clientProcess;  
        }  
        set  
        {  
            _clientProcess = value;  
            OnPropertyChanged("clientProcess");  
        }  
    }    
}  
}    

在 WPFApp.xaml.cs 中

BindingModel bind=new BindingModel();
bind.clientProcess = e.Result.GetClientProcessesResult.ToList< VW_ClientProcess>();  

这是我的 xaml 代码(WPFApp.xaml)

<dxlc:LayoutGroup>
   <dxlc:LayoutGroup.DataContext>
      <ViewModel:BindingModel />
    </dxlc:LayoutGroup.DataContext>
   <dxlc:LayoutItem x:Name="liClientProcess"
                         Width="auto"
                         VerticalAlignment="Bottom"
                         Label="Client Process"
                         LabelPosition="Top">

         <dxg:LookUpEdit x:Name="lueClientProcess"    
                     AutoPopulateColumns="True"    
                     DisplayMember="ClientFullName"    
                     ItemsSource="{Binding clientProcess}"    
                     ValueMember="ProcessID" /> 
   </dxlc:LayoutItem>
</dxlc:LayoutGroup>

问题是当我在 xaml 中设置 ItemSource 时,只显示列名,但数据字段为空。

但是如果我像这样通过 c# 代码设置 ItemSource

BindingModel bind = new BindingModel();
lueClientProcess.ItemsSource = bind.clientProcess;    

lookupedit 编辑正在被填充。我是 WPF 的新手。我不知道我在这里做错了什么。

【问题讨论】:

  • sn-ps 代码放在一起没有意义。这是什么bind 对象?
  • 抱歉,我现在编辑我的问题。 bind 是对象名。
  • 仍然很难看到发生了什么......例如,你是如何设置 DataContext 的?
  • 感谢您的回复。我将 BindingModel 类设置为 datacontext。
  • 谢谢,我想这说明了问题。

标签: c# wpf xaml wcf-binding


【解决方案1】:

看起来问题是您正在创建 BindingModel 的重复实例。所以这里在 XAML 中创建一个实例,并将其分配给视图的 DataContext:

<dxlc:LayoutGroup.DataContext>
  <ViewModel:BindingModel />
</dxlc:LayoutGroup.DataContext>

但是这并没有使用现有的实例,而是创建了一个没有附加到 UI 任何地方的新实例:

BindingModel bind=new BindingModel();
bind.clientProcess = e.Result.GetClientProcessesResult.ToList< VW_ClientProcess>();

所以我猜你想要什么,而不是上面的:

var bind = (BindingModel)DataContext;
bind.clientProcess = e.Result.GetClientProcessesResult.ToList< VW_ClientProcess>();

【讨论】:

  • 再次感谢。我尝试了您的解决方案,它正在抛出 NullReferenceException
  • 嗨,非常感谢。 NullReferenceException 是因为我没有指定哪个 DataContext。改变 var bind = (BindingModel)DataContext;到 var bind = (BindingModel)lgTopGroup.DataContext;工作。 lgTopGroup 是我已将 datacontext 设置为的布局组的名称
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 2012-10-20
相关资源
最近更新 更多