[英]Extended toolkit values not retaining in WPF
我有一個WPF Datagrid,我想在其中實現一個CheckCombobox列。 我下載了extendedToolkit,如下所示,
<DataGridTemplateColumn Header="Operation" MinWidth="150" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding SelectedOperations,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True,NotifyOnValidationError=True}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<my:CheckComboBox x:Name="_combo" Width="150"
HorizontalAlignment="Center"
VerticalAlignment="Center"
ItemsSource="{Binding Path=AllOperations,UpdateSourceTrigger=Default}"
DisplayMemberPath="OperationName"
ValueMemberPath="OperationName"
SelectedItem="{Binding SelectedOperation, Mode=TwoWay}"
ItemSelectionChanged="_combo_ItemSelectionChanged" SelectedValue="{Binding SelectedOperations, Mode=TwoWay}"
/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
我的問題是,在列失去焦點時,所有檢查的值都會消失,因此當下次打開時,我將擁有所有默認值。 任何人都可以讓我知道我哪里錯了... viewModel如下所示(只顯示了下面代碼中使用的部分)
public ObservableCollection<OperationMasterVM> AllOperations
{
get
{
//SelectedOperation.Clear();
return DAL.GetAllOperations();
}
}
private Dictionary<string,string> _operation = new Dictionary<string,string>();
public Dictionary<string, string> SelectedOperation
{
get
{
return _operation;
}
set
{
_operation = value;
}
}
private string _selectedOperations;
public string SelectedOperations
{
get
{
_selectedOperations = string.Empty;
if (SelectedOperation.Any())
{
foreach (var operation in SelectedOperation)
{
if (string.IsNullOrEmpty(_selectedOperations))
{
_selectedOperations = operation.Value;
}
else
{
_selectedOperations = _selectedOperations + ", " + operation.Value;
}
}
}
return _selectedOperations;
}
set
{
_selectedOperations = value;
}
}
我將向你展示如何使用這個控件:
<xctk:CheckComboBox x:Name="cboResults"
KeyDown="CheckComboBox_OnKeyDown"
ItemsSource="{Binding Path=SelectableOptions}"
DisplayMemberPath="Display"
ValueMemberPath="Value"
SelectedMemberPath="IsSelected"/>
SelectableOptions是SelectableOption類型的Observable集合:
public class SelectableOption
{
public string Display { get; set; }
public string Value { get; set; }
public bool IsSelected { get; set; }
}
您不必構建所選選項的分隔字符串。 這是在您進行選擇並折疊下拉列表時創建的。
我還注意到上面的評論之一提到了鍵盤導航。 我通過創建一個KeyDown事件處理程序來處理這個問題,這樣當CheckComboBox具有焦點並且用戶按下空格鍵時,下拉列表將打開。
private void CheckComboBox_OnKeyDown(object sender, KeyEventArgs e)
{
var obj = (CheckComboBox) sender;
if (e.Key == Key.Space)
{
obj.IsDropDownOpen = !obj.IsDropDownOpen;
}
}
關於此控件的文檔有點稀疏。 希望這會有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.