亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

WPF 中不調用 ValueConverter 轉換方法

WPF 中不調用 ValueConverter 轉換方法

C#
一只斗牛犬 2023-09-16 16:02:34
我正在嘗試使用 ValueConverter 。所有綁定(包括 DataGrid 內容)都正常工作,但我無法將值轉換器應用于 DataGridColumns,也不能應用于其他字段,因為它的方法根本沒有被調用??赡苡袉栴}的地方可能是我們使用Reactive UI作為 MVVM 框架,因此它可能是問題的根源。我正在通過響應式 UI 綁定設置 DataGrid 的項目源。但我嘗試在視圖上設置類似的內容: public partial class OrderTimeSheetUserControl : OrderTimeSheetBaseUserControl    {        public OrderTimeSheetUserControl()        {            this.DataContext = ViewModel; // Set data context in case it may have helped (but it did not)            InitializeComponent();        }    }PS:我嘗試過內置的 BooleanToVisibilityConverter,以及通過繼承 MarkupExtension 類和略有不同的使用方法編寫我的轉換器。(帶有 MarkupExtension 的 IValueConverter)值轉換器如下:  [ValueConversion(typeof(bool), typeof(Visibility))]public class BoolToCollapsedVisibilityValueConverter : IValueConverter{    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)    {        if (value is bool == false)        {            throw new NotSupportedException($"Conversion from {value.GetType().Name} is not supported by {nameof(BoolToCollapsedVisibilityValueConverter)}.");        }        var boolValue = (bool) value;        return boolValue ? Visibility.Visible : Visibility.Collapsed;    }    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)    {        throw new NotImplementedException();    }}它在 XAML 頁面中的用法: <userControls:OrderTimeSheetBaseUserControl.Resources> <wpfValueConverters:BoolToCollapsedVisibilityValueConverter x:Key="Conv" /> <DataGrid>     <DataGrid.Columns>         <DataGridComboBoxColumn Visibility="{Binding BackPayCategoryVisible, Converter={StaticResource Conv}}" Header="Backpay Cat."/>     </DataGrid.Columns> </DataGrid>xaml.cs 中 DataGrid 的 ItemsSource 的響應式 UI 綁定:   this.OneWayBind(ViewModel,                    viewModel => viewModel.Employees,                    view => view.PersonsInOrderDataGrid.ItemsSource)                .DisposeWith(disposable);因此,所有屬性都已正確綁定,但值轉換器不起作用。
查看完整描述

1 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

默認情況下ADataGridColumn不會繼承任何內容DataContext,因此您的綁定會失敗,這就是轉換器從未被調用的原因。這與 ReactiveUI 無關。


public class BindingProxy : Freezable

{

? ? protected override Freezable CreateInstanceCore()

? ? {

? ? ? ? return new BindingProxy();

? ? }


? ? public object Data

? ? {

? ? ? ? get { return (object)GetValue(DataProperty); }

? ? ? ? set { SetValue(DataProperty, value); }

? ? }


? ? public static readonly DependencyProperty DataProperty =

? ? ? ? DependencyProperty.Register("Data", typeof(object), typeof(BindingProxy), new UIPropertyMetadata(null));

}

XAML:


<DataGrid.Resources>

? ? <local:BindingProxy x:Key="proxy" Data="{Binding}" />

</DataGrid.Resources>

...

<DataGridTextColumn Header="Backpay Cat." Binding="{Binding Price}"

? ? ? ? ? ? ? ? ? ? Visibility="{Binding Data.BackPayCategoryVisible,

? ? ? ? ? ? ? ? ? ? ? ? Converter={StaticResource Conv},

? ? ? ? ? ? ? ? ? ? ? ? Source={StaticResource proxy}}"/>


查看完整回答
反對 回復 2023-09-16
  • 1 回答
  • 0 關注
  • 317 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號