我有我的Silverlight應用程序,它將數據從視圖模型中拉入數據網格。該虛擬機通過Mef公開。我也有一個具有組合框的細節網格。該虛擬機還包含用於填充組合框值的數據。第一次加載時,一切正常,te組合框上的選定項目是正確的,我可以選擇其他值。但是,如果我排序我的主要數據網格(允許sort = true),那麼我發現組合框中選定值的綁定消失了。組合框仍填充了數據,但沒有選擇任何內容。綁定組合框中選定的值查看模型
有沒有人遇到過這個問題?我不確定如何解決這個問題。
謝謝
我有我的Silverlight應用程序,它將數據從視圖模型中拉入數據網格。該虛擬機通過Mef公開。我也有一個具有組合框的細節網格。該虛擬機還包含用於填充組合框值的數據。第一次加載時,一切正常,te組合框上的選定項目是正確的,我可以選擇其他值。但是,如果我排序我的主要數據網格(允許sort = true),那麼我發現組合框中選定值的綁定消失了。組合框仍填充了數據,但沒有選擇任何內容。綁定組合框中選定的值查看模型
有沒有人遇到過這個問題?我不確定如何解決這個問題。
謝謝
你是如何收集數據的組合框?它是一個字符串列表還是特定對象列表?可能發生的是,排序是在其組合框或每行數據中創建另一組對象,並且所選項目不再與引用匹配。你能發佈一個代碼示例嗎?
代碼的組合框如下:
<TextBlock>Status</TextBlock>
<ComboBox x:Name="CB_Status" ItemsSource="{Binding Status}" SelectedValuePath="StatusId" SelectedValue="{Binding CurrentCall.StatusId, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" ItemTemplate="{StaticResource StatusTemplate}" />
<TextBlock>Priority</TextBlock>
<ComboBox x:Name="CB_Priority" ItemsSource="{Binding Priorities}" SelectedValuePath="PriorityId" SelectedValue="{Binding CurrentCall.PriorityId, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" ItemTemplate="{StaticResource PriorityTemplate}"/>
<TextBlock>Issue Type</TextBlock>
<ComboBox x:Name="CB_IssueType" ItemsSource="{Binding IssueType}" SelectedValuePath="IssueTypeId" SelectedValue="{Binding CurrentCall.IssueTypeId, Mode=TwoWay,NotifyOnValidationError=True, ValidatesOnExceptions=True}" ItemTemplate="{StaticResource IssueTemplate}" />
的數據是從一個VM拉動,並且數據被稱爲使用異步在開始通話,和變量填充如下:
private IEnumerable<Priority> _priorities;
public IEnumerable<Priority> Priorities
{
get { return _priorities; }
set
{
if (value != _priorities)
{
_priorities = value;
this.RaisePropertyChanged("Priorities");
}
}
}
private IEnumerable<Status> _status;
public IEnumerable<Status> Status
{
get { return _status; }
set
{
if (value != _status)
{
_status = value;
this.RaisePropertyChanged("Status");
}
}
}
private IEnumerable<IssueType> _issueType;
public IEnumerable<IssueType> IssueType
{
get { return _issueType; }
set
{
if (value != _issueType)
{
_issueType = value;
this.RaisePropertyChanged("IssueType");
}
}
}
所以comboboxes是IEnumerable各種實體的集合。事情是在排序時,父表,組合框會丟失它們的選定值,但組合框的數據保持不變。通過小提琴手,我可以看到沒有任何後續調用來獲取組合框的數據。
之前我曾經用過的SelectedValue的一個想法和問題是,當一個combox,datagrid等......經歷了類似的狀態變化;焦點丟失,重畫和其他一些他們將改變SelectedValue爲null。有可能,當您選擇一個值時,VM上的SelectedValue(綁定屬性)被設置。但是,當網格排序時,它還會通知VM將SelectedValue設置爲'null'。因此,排序後組合框設置爲默認值。
您可以嘗試的一種方法是在SelectedValue屬性set中設置一個斷點,並在Debug.Assert期間查看值的設置頻率。
不確定你的設置在這裏,但如果你的數據網格是一個調用列表和CurrentCall是選定的項目,你不能使用元素綁定?例如。
<ComboBox x:Name="CB_Status"
ItemsSource="{Binding Status}"
SelectedItem="{ Path=SelectedItem.Status, Mode=TwoWay, ElementName=YOUR_DATAGRID}"
ItemTemplate="{StaticResource StatusTemplate}" />
我假設網格的DataContext的必然IEnumerable<Call>
(或東西)在VM上,所以我會說一種會導致一個新的集合(例如,如果你說的.sort或命令等等)。
這裏是工作示例的快速切割(使用列表框在這種情況下,不DataGrid中)
<ComboBox
DisplayMemberPath="DisplayName"
SelectedItem="{Binding Path=SelectedItem.Individual.IndividualNameTitle,
Mode=TwoWay, ElementName=AccountList}"
ItemsSource="{Binding Path=IndividualNameTitles}">
</ComboBox>
希望它能幫助。
毛茸茸的,我只是注意到這一天試圖設置異步組合框加載。出於某種原因,ComboBox似乎會放棄綁定(但您已經知道這一點)。無論如何,我把這篇文章放在一起解決了其中的一些問題。讓我知道它是否有幫助。
http://blogs.msdn.com/kylemc/archive/2010/06/18/combobox-sample-for-ria-services.aspx
凱爾