2015-02-13 4 views
1

Зрения:MahApps.Metro SplitButton SelectedItem Databinding

<Controls:SplitButton Margin="217,409.75,56,185" Name="SplitButton1" 
           Width="384" 
           HorizontalAlignment="Center" 
           HorizontalContentAlignment="Center" 
           VerticalContentAlignment="Center" 
           Orientation="Vertical" 
           DisplayMemberPath ="UserName" 
           SelectedItem="{Binding SelectedUser,UpdateSourceTrigger=PropertyChanged,Mode=OneWay}" 
           ItemsSource="{Binding Users, Mode=TwoWay}" /> 

ViewModel является:

 public string SelectedUser 
    { 
     get { return selectedUser; } 
     set 
     { 
      selectedUser = value; 
      RaisePropertyChanged("SelectedUser"); 
     } 
    } 

    public ObservableCollection<UserModel> Users 
    { 
     get 
     { 
      return users; 
     } 
     set 
     { 
      users = value; 
     } 
    } 

Модель является:

public class UserModel 
{ 
    private int id; 
    private string userName; 
    private int groupId; 
    private string deviceMacAddress; 

    public int Id { get; set; } 
    public string UserName { get; set; } 
    public int GroupId { get; set; } 
    public string DeviceMacAddress { get; set; } 
} 

я использую приведенный выше код в XAML для привяжите выбранный элемент в разделе split к виду ViewModel-> - SelectedUser.
но не работает. кто знает почему?

Выбранный пользователь возвращается в качестве имени модели (PresentationLayer.Model.UserModel) вместо обеспечения пользовательского имени.

ответ

2

Потому что ваша привязка OneWay по вашему определению.

Установите привязку к TwoWay.

<Controls:SplitButton SelectedItem="{Binding SelectedUser,Mode=TwoWay}"/> 

И, нет необходимости устанавливать UpdateSourceTrigger=PropertyChanged в этом случае, поскольку UpdateSourceTrigger является PropertyChanged по умолчанию для SelectedItem собственности.

+0

благодарит за ваш ответ. класс пользователя имеет следующие свойства, public int Id {get; задавать; } public string UserName {get; задавать; } public int GroupId {get; задавать; } public string DeviceMacAddress {get; задавать; } как, если я просто хочу привязать выбранное имя.UserName? –

+0

решена. Мне нужно изменить тип SelectedItem как UserModel, а не строку. –

Смежные вопросы