WPF アプリケーションに問題があります。
データグリッド (Wpf Toolkit) があり、行の検証を管理する必要があります...検証結果が false の場合、他の行は選択できません。
したがって、編集する現在の行への選択をブロックする必要があります。
どのようにできるのか?何か案は?
WPF アプリケーションに問題があります。
データグリッド (Wpf Toolkit) があり、行の検証を管理する必要があります...検証結果が false の場合、他の行は選択できません。
したがって、編集する現在の行への選択をブロックする必要があります。
どのようにできるのか?何か案は?
ルーク、
この質問をするのはあなたが初めてではありません。Selector 派生コントロールの PreviewSelectionChangeEvent などのイベントがない現在の WPF バージョンの主な欠点です。この問題に対するコミュニティが承認した唯一の解決策は、もちろん HACK ソリューションです。これがアプローチです。
public void OnSelectionChange(object sender, SelectionChangedEventArgs e)
{
// Selector is based class for all selection enabled control
// (not too sure if your datagrid
// derives from the same class, you will need to check).
var selector = e.OriginalSource as Selector;
if (selector == null) return;
// Get the old items and new items from the selection change
// (note, that they are IList type).
// Let's assume that your datagrid will only allow single cell selection only,
// ie. newItems.Count == 1
var newItems = e.AddedItems;
var oldItems = e.RemovedItems;
// May need to check if not null first.
if (oldItems.Count == 1 && newItems.Count == 1)
{
// Checking logic for the first (and only) items.
// Casting the item into our known type.
var myObject = newItems[0] as myType;
// Notice that I reversed the logic, this is because we are
// only interested in when our logic fails and we need to revert
// the selection to the old item,
// otherwise the new item is selected by default
if (!(myObject != null && SomeOtherCondition))
selector.SelectedItem = oldItems[0];
}
}
解決につながることを願っています。