整个“故事”只是为了能够在 XAML 中配置所有内容。我正在尝试将参数(来自我的 Application 类的变量)传递给 ObjectDataProvider(ODP) 方法。这个想法是使用标记扩展。现在在运行时一切正常,扩展为 ODP 返回此参数。在设计时它不起作用。标记扩展在设计时不可用吗?有什么方法可以检查它们是否被称为到期设计时间?
扩大:
namespace ZApplication
{
public class ZAppExtension : MarkupExtension
{
public ZAppExtension() { }
public override object ProvideValue(IServiceProvider serviceProvider)
{
MessageBox.Show("ProvideValue called");
return @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=TermineDB;Integrated Security=True;Persist Security Info=True";
}
}
}
XAML 对象数据提供者:
<ObjectDataProvider x:Key="objKalender"
MethodName="GetKalender"
ObjectType="{x:Type zzzDataLayer:TermineAPI}">
<ObjectDataProvider.MethodParameters>
<z:ZAppExtension></z:ZAppExtension>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
在设计时不起作用的绑定:
<ListBox x:Name="listBox" Height="129" Margin="19,0,18,37" VerticalAlignment="Bottom"
ItemsSource="{Binding Mode=OneWay, Source={StaticResource objKalender}}"
DisplayMemberPath="Beschreibung" SelectedValuePath="Id"
SelectedIndex="2" SelectedValue="{Binding PrimaryCalendarId}" BorderThickness="1"/>
证明扩展有效:
<TextBlock x:Name="textBlock1" HorizontalAlignment="Right" Margin="0,210,42,190" TextWrapping="Wrap" Text="{z:ZApp}" Width="247"/>
如果在设计时不允许/以某种方式禁用标记,那么将任何变量传递给 MethodParameter 的方法是什么?
任何帮助将不胜感激。
编辑添加 GetKalender:
public static IEnumerable<Kalender> GetKalender(String strConnectionString=null)
{
zEntityContext.zDataContext dc;
if (String.IsNullOrEmpty(strConnectionString))
dc = new zEntityContext.zDataContext();
else
dc = new zEntityContext.zDataContext(strConnectionString);
return dc.Kalendere.Select(kalender => new Kalender(kalender, dc));
}
为在 ListBox 绑定中将 DinamResource 更改为 StaticResource 进行了编辑。