2013-08-21 3 views
0

ListBoxObservableCollection으로 채우려고합니다. 그러나 새 항목을 추가 할 때 아무것도 표시되지 않으면 빈 항목 만 추가됩니다. XAMLObservableCollection 및 DisplayMemberBinding

<ListView ItemsSource="{Binding Points}" SelectedItem="{Binding Point}"> 
<ListView.View> 
<GridView AllowsColumnReorder="False"> 
<GridViewColumn Header ="X" Width="100" DisplayMemberBinding = "{Binding Path=ValueX, Mode=TwoWay}" /> 
<GridViewColumn Header ="Y" Width="100" DisplayMemberBinding = "{Binding Path=ValueY, Mode=TwoWay}"/> 
</GridView> 
</ListView.View> 
</ListView> 

Window 클래스

var value = new Value(); 
var viewModel = new ViewModel(value); 
DataContext = viewModel; 
InitializeComponent(); 

값 클래스

private const Point POINT = null; 
private readonly ObservableCollection<Point> _points = new ObservableCollection<Point>(); 
public Value() { 
Point = POINT; 
Points = _points; 
} 

public Point Point { get; set; } 
public ObservableCollection<Point> Points { get; private set; } 
public double ValueX { get; set; } 
public int ValueY { get; set; } 

뷰 모델 클래스

012 :

내 코드의 조각이있다

및 포인트 클래스

public class Point { 
    public readonly double ValueX; 
    public readonly double ValueY; 

    public Point(double valueX, double valueY) { 
     ValueX = valueX; 
     ValueY = valueY; 
    } 

    public override string ToString() { 
     return (ValueX + " " + ValueY); 
    } 
} 

내가 새 항목을 추가 할 때 새 항목이 추가되지만 아무것도 표시되지 않습니다. 무슨 이유가 여기 있니? 당신이 각 항목 ValueXValueY이 유효 바인딩 소스 수없는 필드로 선언있는 Point 유형을 의미 ItemsSourceObservableCollection<Point>에 결합하기 때문에

+1

혼란 스러울 것 같은데 ... 왜 당신은 당신의 뷰 모델에서 데이터 타입 프로퍼티를 구현 했습니까? 거기에'ValueX'와'ValueY'를'OnPropertyChanged'와 함께 쓰면 안됩니다 ... 당신은'Point' 데이터 타입에 * 그 코드가 있어야합니다. Visual Studio의 출력 창에 바인딩 오류가 표시됩니다 ... 무엇이 표시됩니까? – Sheridan

+0

아니요, 예외가 없습니다 – Bashnia007

+0

Visual Studio에서 도구> 옵션> 디버깅> 출력 창> WPF 추적 설정으로 이동하여 '데이터 바인딩'옵션을 '경고'또는 '오류'로 설정하십시오. MSDN의 [방법 : WPF 추적 정보 표시] (http://msdn.microsoft.com/en-us/library/dd409960.aspx) 페이지에서 자세한 내용을 확인할 수 있습니다. – Sheridan

답변

1

. 속성을 변경합니다

public double ValueX { get; private set; } 
public double ValueY { get; private set; } 

당신이 읽기 전용 뭔가를 Mode=TwoWay를 사용 외에. 이 값을 OneWay으로 변경해야합니다. TwoWay 바인딩을 남기고 싶은 경우 setter에서 private을 제거한 다음 표시 전용 인 DisplayMemberBinding 대신 GridViewColumn.CellTemplate을 일부 TextBox으로 변경해야합니다.

+0

실행 중에 능력을 변경해야하기 때문에 불가능합니다. 사용자가 변경해야합니다. ViewModel – Bashnia007

+0

을 편집했는데 왜 [readonly']로 표시 했습니까? (http://msdn.microsoft.com/en-us/library/acdd6hb7.aspx)? – dkozl