WPF lookupedit绑定无法正常工作

时间:2013-12-31 09:19:02

标签: c# wpf xaml wcf-binding

我正在尝试将结果从WCF服务绑定到devexpress lookupedit。

这是我创建的属性

<!-- 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的新手。我不知道我在这里做错了什么。

1 个答案:

答案 0 :(得分:2)

看起来问题是您正在创建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>();