2011-09-22 12 views
0

사용자의 이름을 입력하기 위해 textName을 사용합니다. 그런 다음 입력하면 textchanged 이벤트는 입력란과 일치하는 이름으로 목록 상자를 업데이트 한 다음 사용자가 항목 (목록 상자의 CompletedName)을 클릭 할 수 있으며 항목 내용이있는 텍스트 상자 업데이트가 필요한 경우 발생합니다.이 문제는 시작되었습니다. "CompletedName"에 대한 "GivenName"(쿼리 대상 테이블의 필드)을 변경했을 때 발생합니다. 위의 쿼리에서 문자열 concat입니다.두 개의 onewaytosource 문제 목록 상자에 텍스트 상자 바인딩?

이 LINQ 쿼리가 있습니다. 그런 다음

var players = 
        from p in context.Player 
        where (p.GivenName.StartsWith(TextName.Text.Trim()) || p.Number.StartsWith(TextName.Text) || p.Surname.StartsWith(TextName.Text)) 
        select new { CompleteName = p.GivenName + " " + p.Surname + " (" + p.Number + ")"}; 

나는이 목록 상자라는 이름의 listNames의 소스하고 나는이 텍스트 상자가 :

<TextBox Name="TextName" Text="{Binding ElementName=listNames, Path=SelectedItem.CompleteName}"/> 
를 내가 그것을 실행하면

는 다음 오류가 표시됩니다 :

"A 양방향 또는 OneWayToSource 읽기 전용 속성 유형의 'CompleteName' '<> f__AnonymousType0`1 [선택 System.String]'에서 작동하지 않을 수 있습니다 바인딩"

물론 TwoWay 또는 OneWayToSource가 될 수 없다는 것을 이해합니다. 그러나 사용자가 목록 상자에서 SelectedItem을 업데이트하지 않고 검색 텍스트 상자이기 때문에 textName에 내용을 추가 할 수 있어야합니다.

Mode = OneWay라는 표현식을 텍스트 상자에 추가하면 textName 컨트롤에서 아무런 변화가 없습니다. 목록 상자의 항목을 표시하지 않습니다. 어떻게 작동합니까?

+0

의 OnlyRead 원이었다 Anonimous 유형을 사용하는이 방법을 사용하면 XAML –

답변

0

같은 사람이 다음에 대해 내 대답을 답장합니다 문제.

public class CompleteNamesResuls 
    { 
     public String CompleteName { get; set; } 
    } 
    private void TextName_TextChanged(object sender, TextChangedEventArgs e) 
    { 
       var players = 
        from p in context.Player 
        where (p.GivenName.StartsWith(TextName.Text.Trim()) || p.Number.StartsWith(TextName.Text) || p.Surname.StartsWith(TextName.Text)) 
        select new CompleteNamesResuls(){ CompleteName = p.GivenName + " " + p.Surname + " (" + p.Number + ")" }; 

    } 

대신

0

익명 형식의 인스턴스에 바인딩하고 있지만 익명 형식의 속성은 읽기 전용이므로 바인딩으로 CompleteName 속성을 업데이트 할 수 없습니다.

어쨌든, 내가 이해하는 바에 따르면 이름을 업데이트하려고하지 않고 TextBox는 실제로 검색 상자입니다. 이 경우 사용중인 접근 방식은 작동하지 않습니다. 이벤트를 TextBox (MVVM을 사용하는 경우 ViewModel의 속성에 바인딩) 처리해야하며 새 값을 사용하여 ListBox에서 적절한 항목을 선택하십시오. 어쨌든 검색을 수행하는 메서드에서 해당 속성에 액세스 할 수 없기 때문에 익명 형식으로이 작업을 수행 할 수 없게됩니다.

+0

의 자세한 내용을 표시 할 수 있습니다 : 나는 그것이 모드에서 작동 할 수없는 것처럼 = 한방향 내가 이런 짓을 사용자 이름을 입력하려면 textName을 사용합니다. 그런 다음 입력하면 textchanged 이벤트는 입력란과 일치하는 이름으로 목록 상자를 업데이트 한 다음 사용자가 항목을 클릭 할 수 있으며 항목이있는 텍스트 업데이트가 필요합니다. "GivenName"(내가 쿼리 한 테이블의 필드로) "CompletedName" – Max

관련 문제